hibernate lazy策略可以使用在:
* <class>可以取值true/false
* <property>标签上,可以取值,true/false需要类增前工具
* <set><list>标签上,可以取值:true/false/extra
* <one-to-one><many-to-one>单端关联上,可以取值:false/proxy/noproxy
lazy概念,只有真正使用该对象时,才会创建,对于hibernate而言,真正使用的时候才会发出sql
hibernate支持lazy策略只有在session打开状态下有效,OpenSessionInView
1.class标签上的lazy特性只对普通属性起作用
默认配置下(lazy="true"),load查询支持延迟加载,并且生成的对象为代理对象
设置Class标签上的lazy="false",load查询不再支持延迟加载,生成的对象为真实对象
class标签上的lazy属性,之对load方式的查询起作用,get方式不支持延迟加载
默认配置下也就是支持延迟加载的情况下,get方式得到的对象再session关闭后依然可以得到对象的属性
时而load方式 则会抛出异常,因为延迟加载,真正访问到对象的方法的的候要到数据库中查询,而此时session已经关闭了。
默认支持延迟加载情况下,load的时候,对象里面的所有的普通属性会被查询出来。
2.hibernate在集合上的lazy策略,可以取值true/false/extra
<class>标签上的lazy不会影响到集合上的lazy特性
设置集合 标签上的lazy="extra"会根据查询内容发出智能的sql语句,不会查询出所有关联对象,例如students.size(),只会发出
select count(*) from…..
3.hibernate在单端关联上的lazy策略,可以取值,false/proxy/noproxy
默认为proxy
<class>标签上的lazy属性不会影响到单端关联上的lazy特性
Hibernate中的lazy策略
猜你喜欢
转载自xueyue521-qq.iteye.com/blog/1039510
今日推荐
周排行