我有一个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。
有任何解释吗?
答案 0 :(得分:2)
我现在有了答案,但我继续发布,因为作为一名Hibernate业余爱好者,这对我来说并不明显。基于this answer by ChssPly76,我现在看到,当所有字段都是null
时,Hibernate会将组件设置为null
。这种行为是正式的,我记录了here:
组件的空值语义是临时的。当重新加载包含对象时,Hibernate将假设如果所有组件列都为null,则整个组件为null。这适用于大多数用途。
这意味着当您仍在使用您设置字段的引用时,它将保持设置状态,但如果您查询Hibernate以再次检索此对象,则该字段将为null,如果其所有组件均为null 。
希望通过其他方式使用Java代码来帮助其他人追逐NullPointerException
。