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 次 |
最近记录: |