Hibernate的lazy策略
Hibernate的lazy策略可以使用在:
*<class>标签上,可以取值:true/false(只影响普通属性,不影响集合属性à集合上设置的还按集合上设置的lazy策略执行;不影响<manay-to-one>/<one-to-one>单端关联à<manay-to-one>/<one-to-one>单端关联标签上设置的还按照其设置的lazy策略执行)
*<property>标签上,可以取值:true/false (用的比较少,需要类增强工具,对字节码进行修改,如果某个属性时图片或是大文本可用)
*<set>\<list>标签上,可以取值:true/false/extra(建议集合上设置为extra,其余和true一样,只是在count 时true会把所有子类都加在到内存,再计算总数,而extra会智能地发一条count语句)
*<manay-to-one>/<one-to-one>单端关联标签上,可以取值,false/proxy/noproxy(需要增强工具)
lazy概念:只有真正需要对象的时候才会创建对象,对于hibernate而言,只有真正要使用的时候才会发出Sql语句 ,lazy的有效期就是session的有效期
Hibernate支持lazy策略只有在session打开状态下,为了保证Hibernate的lazy策略得以应用 提出了OpenSessionInView模式
在spring中 spring给我们实现了一个OpenSessionInViewFilter
JPA中也支持lazy策略,同样在spring中 spring给我们实现了一个org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
<class>标签上的lazy策略不会影响到集合上的lazy特性,也不会影响到<many-to-one>
<one-one-one> 单端关联上的lazy, 它只会影响到一般属性。