jua*_*edi 7 java hibernate jpa javassist
我正在使用Hibernate和JPA,并且有一个如下所示的关系:
public class PencilImpl implements Pencil {
@ManyToOne(targetEntity = PersonImpl.class, fetch = FetchType.LAZY)
@JoinColumn(name = "owner", nullable = false)
private Person owner;
...
@Override
public final Person getOwner() {
return owner;
}
}
Run Code Online (Sandbox Code Playgroud)
由于我开始使用LAZY fetch类型,每次我尝试获取铅笔的所有者(pencil.getOwner)时,我会得到一个非null对象,其所有内部属性都设置为null.
我看起来Hibernate创建的代理不应该从数据库中获取真实对象.
有任何想法吗?谢谢 :)
这就是Hibernate如何实现延迟加载.它将为您提供代理对象,而不是实体类的实例.当你说
一个非null对象,它的所有内部属性都设置为null
这可能是你在调试器中看到的,对吧?您不必担心,一旦您通过代码或调试器内部的调用访问任何这些属性,Hibernate将在后台加载来自DB的数据,构建实体类的实例以及所有调用代理对象将透明地委派给实际实体.通常,理想情况下,您不必关心Hibernate代理< - >实体对象的区别.
无论如何,我可以想到有两个理由要注意这种区别:
instanceof
和强制转换.阅读这个关于如何测试对象是否是Hibernate代理以及如何将其转换为真实实体对象的问题 归档时间: |
|
查看次数: |
6007 次 |
最近记录: |