`
bulote
  • 浏览: 1308136 次
文章分类
社区版块
存档分类
最新评论

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
分享到:
评论

相关推荐

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     16.4.3 无代理延迟检索(lazy属性为“no-proxy”)  16.4.4 立即检索(lazy属性为“false”)  16.4.5 批量延迟检索和批量立即检索(使用batch-size属性)  16.5 控制迫切左外连接检索的深度  16.6 在应用程序...

    Hibernate延时加载与lazy机制.doc

    Hibernate延时加载与lazy机制.docHibernate延时加载与lazy机制.doc

    集成spring的hibernate懒加载

    解决org.hibernate.LazyInitializationException: could not initialize proxy - no Session...

    hibernate总结

    3. no-proxy ii. set 一对多 1. true  2. false  3. extra 根据对set容器的不同,可以产生高效的sql访问数据库 2. 批量检索:batch-size=3 a) 可以使用批量检索: b) 在内存中,如果有多个set(代理)容器需要...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     16.4.3 无代理延迟检索(lazy属性为“no-proxy”)  16.4.4 立即检索(lazy属性为“false”)  16.4.5 批量延迟检索和批量立即检索(使用batch-size属性)  16.5 控制迫切左外连接检索的深度  16.6 在应用程序...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     16.4.3 无代理延迟检索(lazy属性为“no-proxy”)  16.4.4 立即检索(lazy属性为“false”)  16.4.5 批量延迟检索和批量立即检索(使用batch-size属性)  16.5 控制迫切左外连接检索的深度  16.6 在应用程序...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     16.4.3 无代理延迟检索(lazy属性为“no-proxy”)  16.4.4 立即检索(lazy属性为“false”)  16.4.5 批量延迟检索和批量立即检索(使用batch-size属性)  16.5 控制迫切左外连接检索的深度  16.6 在应用程序...

    维生药业小项目 SSH简单学习项目

    维生药业小项目 SSH简单... proxy-target-class="true" /&gt; &lt;!-- 使用annotation 自动注册bean,并检查@Required,@Autowired的属性已被注入 --&gt; &lt;context:component-scan base-package="com.sixth" /&gt; &lt;/beans&gt;

    spring-framework-reference-4.1.2

    Not Using Commons Logging ..........................Lazy-initialized beans ....................................................................................... 47 Autowiring collaborators ...............

    spring-framework-reference4.1.4

    Not Using Commons Logging ..........................Lazy-initialized beans ....................................................................................... 47 Autowiring collaborators ...............

Global site tag (gtag.js) - Google Analytics