我有一个像这样的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
字段返回空值。有什么解释吗?
最佳答案
我现在有了答案,但是我继续发布,因为对于Hibernate业余爱好者来说,这并不明显。基于this answer by ChssPly76,我现在看到当所有字段都为null
时,Hibernate会将组件设置为null
。这种行为是官方的,我发现here有记录:
组件的空值语义是临时的。当重载包含对象时,Hibernate会假定如果所有组件列均为null,则整个组件均为null。这适合大多数目的。
这意味着,当您仍在使用设置字段的引用时,该字段将保持设置状态,但是如果您查询Hibernate再次检索该对象,则如果该字段的所有组件均为null,则该字段将为null。
希望这可以帮助其他人不要在其他正常工作的Java代码中追逐NullPointerException
。