小编Rus*_*ard的帖子

如何在JPA中创建从超类瞬态继承的映射字段?

我有一个无法更改的旧架构.我正在使用基类来实现常见功能,它包含一个嵌入式对象.有一个字段通常映射在嵌入对象中,该字段只需要在一个(很多)子类的持久性ID中.我创建了一个包含它的新id类,但后来我得到了该字段映射两次的错误.下面是一些简化的示例代码,以保持读者的理智:

@MappedSuperclass
class BaseClass {
    @Embedded
    private Data data;
}

@Entity
class SubClass extends BaseClass {
    @EmbeddedId
    private SubClassId id;
}

@Embeddable
class Data {
    private int location;

    private String name;
}

@Embeddable
class SubClassId {
    private int thingy;

    private int location;
}
Run Code Online (Sandbox Code Playgroud)

我试过@AttributeOverride,但我只能重命名该字段.我试图将它设置为updatable = false,insertable = false但是当在@AttributeOverride注释中使用时,这似乎不起作用.有关此问题的解决方案,请参阅下面的答案.

我意识到我可以改变基类,但我真的不想拆分嵌入对象来分离共享字段,因为它会使周围的代码更复杂,并且需要一些丑陋的包装代码.我也可以为这个角落案例重新设计整个系统,但我真的不愿意.

我使用Hibernate作为我的JPA提供程序.

java database mapping orm jpa

10
推荐指数
1
解决办法
5636
查看次数

Java自动拆箱 - 是否有编译器警告?

我是Java中自动装箱的忠实粉丝,因为它节省了许多丑陋的锅炉板代码.但是我发现自动取消装箱在某些可能为null的情况下会引起混淆.有没有办法检测代码库中带有javac警告的自动拆箱位置?任何其他解决方案来检测仅出现拆箱(例如FindBugs或特定于Eclipse的编译器警告)将不胜感激,因为我找不到任何解决方案.

为了澄清我不希望在拳击上生成任何警告 - 仅取消装箱.

下面是一些可能导致混淆NullPointerExceptions的代码的简单示例:

class Test {
    private Integer value;

    public int getValue() {
        return value;
    }
}
Run Code Online (Sandbox Code Playgroud)

java autoboxing boxing unboxing

9
推荐指数
2
解决办法
3334
查看次数

java中的基本练习

我有两个A和B类如下:

public class A {
    private int salary = 0; 

    protected void calculate() {
        salary = 400;
    }

    protected A() {
        calculate();
    }   
}

public class B extends A {
    private int salary = 0; // (1)

    protected void calculate() {
        System.out.println("calculating salary...");
        salary = 700;   
    }

    public static void main(String[] args) {
        System.out.println(new B().salary); // (2)  
    }
}
Run Code Online (Sandbox Code Playgroud)

考虑第(2)行:我不明白为什么new B().salary有效,因为第(1)行中的工资的说明符是private.你能帮我解释一下吗?

java

0
推荐指数
1
解决办法
760
查看次数

标签 统计

java ×3

autoboxing ×1

boxing ×1

database ×1

jpa ×1

mapping ×1

orm ×1

unboxing ×1