1
我收集Hibernate使用javassist库来处理对象的惰性初始化。说我有以下实体(getter/setter方法/注解是截断):Eclipse调试器显示Hibernate管理的对象未被懒惰初始化
@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检索为主,comp
对象尚未初始化由于延迟初始化。我希望调用Case A
后,comp
对象将从数据库中检索,但基于调试器,所有comp对象属性显示为空。
只有在Case B
之后,我将name
值保存到localVariableName
中,我可以看到localVariableName获得非空值。
为什么Eclipse将我的对象属性显示为null?
这可能有助于http://www.javalobby.org/java/forums/t20533.html – xyz
您的诊断错误。 A和B是完全一样的东西。不管你存储结果还是不存储在局部变量中都是无关紧要的。所以如果A不会抛出异常,B不会。由于一切都在事务性方法中,所以不应该有任何异常。 –
它实际上不会引发异常,但在案例A期间整个对象的属性被初始化为空。在案例B中,这是它们用来自数据库的值填充的时间。我会更新这篇文章以清楚说明。 –