Jen*_*ing 2 java eclipse spring hibernate
我认为Hibernate使用javassist库来处理对象的延迟初始化.假设我有以下实体(getter/setters/annotations被截断):
@Entity
public class MainEntity {
private ComponentEntity comp;
}
@Entity
public class ComponentEntity {
private Integer id;
private String name;
}
Run Code Online (Sandbox Code Playgroud)
现在我调用以下方法:
@Transactional
public void doSomething() {
MainEntity main = this.dao.find(1);
// Case A
main.getComp().getName();
// Case B
String localVariableName = main.getComp().getName();
}
Run Code Online (Sandbox Code Playgroud)
当DAO检索main时,comp由于延迟初始化,该对象尚未初始化.我希望在调用之后Case A,comp将从数据库中检索该对象,但是基于调试器,所有comp对象属性都显示为null.
只有Case B在我将name值保存到localVariableName我可以看到localVariableName获取非null值之后.
为什么Eclipse将我的对象属性显示为null?
Jen*_*ing 10
延迟初始化的Hibernate管理对象由javassist代理对象管理.因此,在Eclipse调试器中,您必须知道在哪里查看.

该offer对象是一个代理对象,它包含一个包含一个名为的标志的处理程序对象initialized.它目前设定为false.

之后Case A,处理程序的initialized标志现在设置为true.该handler.target对象也改变以反映实际offer对象的初始化属性.
所以延迟初始化按预期工作.
| 归档时间: |
|
| 查看次数: |
2991 次 |
| 最近记录: |