你能简单地解释一下下面这个短语的意思吗:
A relationship that is specified or defaulted to be lazily loaded might or might not cause the related object to be loaded when the getter method is used to access the object. The object might be a proxy, so it might take actually invoking a method on it to cause it to be faulted in. (Pro JPA 2: Mastering the Java Persistence API, page 102)
我的问题是:
- 这是否意味着即使在 getLazyLoadedObj() 方法之后也可能不会加载 lazy_loaded_object?
- 如果第一个问题的答案是"is",那么 getLazyLoadedObj() 方法返回的是什么?
- 我仍然不明白如果 lazy_loaded_object 是代理会有什么变化。请给我解释一下。
提前谢谢你。
最佳答案
回答 1) 是的。为了理解 2) 和 3) 让我们举个例子
假设您有一个类 Parent
它有 Child
.您定义 Child
延迟加载。
class Parent {
Child chil;
//FetchMode = lazy
public Child getChild() {
return child;
}
}
比方说,你已经加载了Parent
实例已经在使用 hibernate session ,比如 parent
现在当您调用 parent.getChild();
时返回对象可以是 Child
的一个实例或者它可以是一个代理。
什么是代理?
代理就像您类(class)的拦截器, Child
的代理在 child
的任何方法之前被调用被调用..
例如,当您调用 child.getName()
--> 让我们说
proxy.someProcessing()
方法被调用
在内部调用 child.getName()
最后返回数据。
为什么我们需要代理?
延迟加载的定义是在需要时加载。所以就在 child.getName()
之前被代理调用,proxy.someProcessing()
方法调用数据库并获取 CHILD
(映射到 Child
的数据库表)的列数据并加载 child
对象。
关于java - JPA:即使使用了 getter 方法,延迟加载也不会加载。希望如此?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17361216/