4

我正在使用 Hibernate 4.3.5.Final 体验带有一些嵌入式 JPA 元模型字段的 NPE。

具体来说,我有以下情况:

  1. @Entity班级A
  2. @Embedded课堂BA
  3. @EmbeddedC扩展类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- 但如果可能的话,我更喜欢继承。

4

0 回答 0