1

我有一个@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();
    }
}

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

有什么解释吗?

4

1 回答 1

2

我现在有了答案,但我继续发帖,因为作为 Hibernate 业余爱好者,这对我来说并不明显。根据ChssPly76 的这个答案,我现在看到 Hibernate 会将一个组件设置为null当它的所有字段都是null. 这种行为是官方的并记录在案,我在这里发现:

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

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

希望这可以帮助其他人不要追逐NullPointerException其他工作的Java代码。

于 2012-10-12T15:36:12.810 回答