Hibernate中的lazy策略

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特性




猜你喜欢

转载自xueyue521-qq.iteye.com/blog/1039510