我正在使用 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
- 但如果可能的话,我更喜欢继承。