举个例子吧:
Child <- many-to-one ->Parentclass 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没区别。不知道我说明白了没有....
Child <- many-to-one ->Parentclass 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没区别。不知道我说明白了没有....
解决方案 »
- 当数据库(Oracle)中的某一个表的某行记录有更新时,怎样及时的通知应用程序
- jdeveloper implements
- .MDF和.LDF后缀的文件是什么啊?
- 谁能给出个在SSH当中hibernate分页程序的java代码和jsp代码?
- quartz的怪现象
- tomcat 启动报错 ERROR [org.springframework.web.context.ContextLoader] -
- 谁有hibernate培训的PPT,江湖救急
- 请问大家在java中return,break,exit(i)有什么区别?
- j2ee服务器(免费 中文版最好)`
- WSAD生成EJB部署代码时奇慢?BUG?
- 各位大虾:请教了!
- 大家好!请问怎么写个批处理来执行java程序?
lazy="no-proxy"指定此属性应该在实例变量第一次被访问时应该延迟抓取(fetche lazily)(需要运行时字节码的增强)。
lazy="false"指定此关联总是被预先抓取。
不过还有几个小问题
是不是这个意思,如果设置了 lazy="proxy",就 Saro 提供的例子来说,当通过 child 来调用其关联的 parent, 如果调用 parent 类中定义的任何方法,都会抓取 parent (所谓的抓取是不是就是从数据库查询,执行一次 select ?)
如果设置了 lazy="no-proxy" ,只有调用 parent 类中牵涉到类变量的方法,才会抓取 parent,否则,就像调用 f(), 不会抓取 parent
"编译时字节码增强" 是什么意思?
对,fetch是hibernate中很重要的概念
2."编译时字节码增强" 是什么意思?
"字节码增强"分编译期和运行期2种,编译期是修改java类编译后的class字节码文件,在上面附加“增强”操作。