hibernate中的lazy的proxy no-proxy

简介:
 
举个例子吧:
Child <- many-to-one ->Parent

class Child {
private Parent parent;

public Parent getParent (){
return this.parent;//访问了实例变量
}

}

class Parent {
private String name;

public String getName(){
return this.name;//访问了实例变量
}

public void f(){
System.out.println("invokeing f()");//没有访问实例变量
}
}

如果 many-to-one 的lazy设为proxy,当child.getParent().getName()或child.getParent().f()时,parent都会被抓取,若设为no-proxy,调用child.getParent().f()时,parent是不会被抓取的,同时这种方式需要编译时字节码增强,否则和proxy没区别。 (注:测试发现真和proxy一样,不能理解 编译时字节码增强,要再哪修改,或是什么条件?)

如果设置了 lazy="proxy",就当通过 child 来调用其关联的 parent, 如果调用 parent 类中定义的任何方法,都会抓取 parent (所谓的抓取是不是就是从数据库查询,执行一次 select ?)
如果设置了 lazy="no-proxy" ,只有调用 parent 类中牵涉到类变量的方法,才会抓取 parent,否则,就像调用 f(), 不会抓取 parent

"编译时字节码增强" 是什么意思?
"字节码增强"分编译期和运行期2种,编译期是修改java类编译后的class字节码文件,在上面附加“增强”操作。(不明白why?)


lazy (可选 - 默认为 proxy): 默认情况下,单点关联是经过代理的。lazy="no-proxy"指定此属性应该在实例变量第一次被访问时应该延迟抓取(fetche lazily)(需要运行时字节码的增强)。 lazy="false"指定此关联总是被预先抓取。注意,如果constrained="false", 不可能使用代理,Hibernate会采取预先抓取!

原帖地址:http://apps.hi.baidu.com/share/detail/38568475
目录
相关文章
|
15天前
|
监控 JavaScript 前端开发
|
2月前
|
Python
proxy配置
proxy配置
|
3月前
|
缓存 安全 网络协议
什么是 Proxy?
什么是 Proxy?
73 0
|
4月前
|
JavaScript 前端开发
什么是Proxy?
什么是Proxy?
35 0
|
5月前
|
自然语言处理 监控 JavaScript
什么是proxy?
什么是proxy?
25 0
|
JavaScript 前端开发
【ES6】Proxy对象
【ES6】Proxy对象
hibernate4 could not initialize proxy - no Session
hibernate4 could not initialize proxy - no Session
ZCMU - 1991: Proxy
ZCMU - 1991: Proxy
66 0
|
JavaScript
用Proxy给reactive套个娃会怎么样?
既然reactive是使用Proxy实现的,而且也可以套娃,那么我们自己定义一个Proxy套一下reactive会怎么样呢?
83 0
|
机器学习/深度学习 JSON JavaScript
es6 Proxy对象详解
Proxy用于修改某些操作的默认行为,也可以理解为在目标对象之前架设一层拦截,外部所有的访问都必须先通过这层拦截,因此提供了一种机制,可以对外部的访问进行过滤和修改。这个词的原理为代理,在这里可以表示由它来“代理”某些操作,译为“代理器”。
1257 0