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
は、null です。
埋め込みクラスに対応して生成されるメタモデル クラスは次のとおりです。
@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