我正在使用Hibernate 4.3.5.Final来体验带有一些嵌入式JPA元模型字段的NPE。
具体来说,我有以下情况:
@Entity
课程A
@Embedded
中的B
课程A
@Embedded
课程C
扩展课程B
我 无法找到静态元模型字段...'启动时的错误在这些情况下似乎很常见,但C_
的所有字段都为空。
我的代码的相关块,简化为易读性:
@Entity
@Table(name = "...")
public class A extends AbstractA {
// Attempting to define override in superclass
@AttributeOverride(name = "cField", column = @Column(name = "SOME_FIELD"))
@Embedded
private B b;
...
}
@Embeddable
@Access(AccessType.FIELD)
public class B extends C {
@Column(name="SOMETHING")
private String bField;
...
}
@Embeddable
@Access(AccessType.FIELD)
public abstract class C implements Serializable {
private static final long serialVersionUID = 1L;
private String cField;
...
}
在此示例中,C_.cField
为空。
嵌入式类的相应生成元模型类是:
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(B.class)
public abstract class B_ extends C_ {
public static volatile SingularAttribute<B, String> bField;
}
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(B.class)
public abstract class C_ {
// This object is null
public static volatile SingularAttribute<C, String> cField;
}
除非我刚刚搞砸了一些问题,否则一个我无法回答的关键问题是 - 一个可嵌入的类可以扩展另一个可嵌入的类吗?我使用关联而不是继承来使用它 - 即C
作为@Embedded
中的B
字段 - 但如果可能的话,我更喜欢继承。< / p>