VB_*_*VB_ 3 java proxy persistence jpa lazy-loading
您能简单解释一下下面这句话的意思吗?
当使用getter方法访问对象时,指定或默认为延迟加载的关系可能会或可能不会导致相关对象被加载。该对象可能是代理,因此它可能实际上需要对其调用一个方法来导致其出错。(Pro JPA 2:掌握Java Persistence API,第102页)
我的问题是:
先感谢您。
回答1)是。为了理解2)和3)让我们举个例子
假设您有一堂课Parent,而且有Child。您定义Child要延迟加载的。
class Parent {
Child chil;
//FetchMode = lazy
public Child getChild() {
return child;
}
}
Run Code Online (Sandbox Code Playgroud)
假设您Parent已经使用休眠会话加载了实例,例如parent
现在,当您调用parent.getChild();返回对象时,它可以是的实例,Child也可以是Proxy。
什么是代理?
代理就像您的类的拦截器一样,Child在调用任何获取方法之前,都要先获取代理child。
例如,当您调用child.getName()->时说
proxy.someProcessing()方法被调用,该方法在内部调用child.getName()
并最终返回数据。
为什么我们需要代理?
延迟加载的定义是在需要时加载。因此,在child.getName()被代理调用之前,proxy.someProcessing()方法会调用DB并获取CHILD(映射到的DB表Child)的列数据并加载child对象。
| 归档时间: |
|
| 查看次数: |
3195 次 |
| 最近记录: |