嵌入式Hibernate实体的赋值返回null

时间:2012-10-12 15:36:13

标签: java hibernate

我有一个Hibernate @Embeddable注释类,如此

@Embeddable
public class DataWrapper {
    private DataWrapperType wrapperType;

    @ManyToOne
    private DataFactorX xFactor;
    @ManyToOne
    private DataFactorY yFactor;
    @ManyToOne
    private DataFactorZ zFactor;

    // Getters and Setters
}

并且它非常简单地用于另一个实体

@Entity
public class DataManager {
    private DataWrapper dataWrapper;

    public DataManager() {
        this.dataWrapper = new DataWrapper();
    }
}

但是当我稍后从Hibernate检索DataManager实例时,dataWrapper字段返回null。

有任何解释吗?

1 个答案:

答案 0 :(得分:2)

我现在有了答案,但我继续发布,因为作为一名Hibernate业余爱好者,这对我来说并不明显。基于this answer by ChssPly76,我现在看到,当所有字段都是null时,Hibernate会将组件设置为null。这种行为是正式的,我记录了here

  

组件的空值语义是临时的。当重新加载包含对象时,Hibernate将假设如果所有组件列都为null,则整个组件为null。这适用于大多数用途。

这意味着当您仍在使用您设置字段的引用时,它将保持设置状态,但如果您查询Hibernate以再次检索此对象,则该字段将为null,如果其所有组件均为null 。

希望通过其他方式使用Java代码来帮助其他人追逐NullPointerException