我收集到 Hibernate 使用 javassist 库来处理对象的延迟初始化。假设我有以下实体(getters/setters/annotations 被截断):
@Entity
public class MainEntity {
private ComponentEntity comp;
}
@Entity
public class ComponentEntity {
private Integer id;
private String name;
}
现在我调用以下方法:
@Transactional
public void doSomething() {
MainEntity main = this.dao.find(1);
// Case A
main.getComp().getName();
// Case B
String localVariableName = main.getComp().getName();
}
当 DAO 检索 main 时,comp
由于延迟初始化,该对象尚未初始化。我希望在调用之后Case A
,该comp
对象将从数据库中检索到,但是基于调试器,所有 comp 对象属性都显示为 null。
只有当Case B
我将name
值保存到 a之后localVariableName
,我才能看到 localVariableName 得到一个非空值。
为什么 Eclipse 将我的对象属性显示为空?