关闭

hibernate lazy属性参数说明

标签: lazy
1250人阅读 评论(1) 收藏 举报
分类:

lazy,延迟加载

Lazy的有效期:只有在session打开的时候才有效;session关闭后lazy就没效了。

lazy策略可以用在:

* <class>标签上:可以取值true/false

* <property>标签上,可以取值true/false,这个特性需要类增强

* <set>/<list>等集合上,可以取值为true/false/extra

* <one-to-one>/<many-to-one>等标签上,可以取值false/proxy/no-proxy

6.1 get和load的区别:

* get不支持延迟加载,而load支持。

* 当查询特定的数据库中不存在的数据时,get会返回null,而load则抛出异常。

6.2 类(Class)的延迟加载:

* 设置<class>标签中的lazy="true",或是保持默认(即不配置lazy属性)

* 如果lazy的属性值为true,那么在使用load方法加载数据时,只有确实用到数据的时候才会发出sql语句;这样有可能减少系统的开销。

* //不会发出查询sql

   System.out.println("group id=" + group.getId());

这里有一个问题,为什么加载主键的时候不需要发出sql语句。

6.3 集合(collection)的延迟加载:可以取值true,false,extra

* 保持集合上的lazy的默认值,此时的效果和lazy="extra"是基本一样的。

* 设置集合上的lazy=extra,此时的效果和lazy属性的默认值是基本一样的。但是推荐使用这个属性值,因为在统计时这种情况显得比较智能。当然延迟是有效果的。

* 设置集合上的lazy=false

true:默认取值,它的意思是只有在调用这个集合获取里面的元素对象时,才发出查询语句,加载其集合元素的数据

false:取消懒加载特性,即在加载对象的同时,就发出第二条查询语句加载其关联集合的数据

extra:一种比较聪明的懒加载策略,即调用集合的size/contains等方法的时候,hibernate并不会去加载整个集合的数据,而是发出一条聪明的SQL语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据。

6.4 Hibernate单端关联懒加载策略:即在<one-to-one>/<many-to-one>标签上可以配置懒加载策略。可以取值为:false/proxy/no-proxy

false:取消懒加载策略,即在加载对象的同时,发出查询语句,加载其关联对象

proxy:这是hibernate对单端关联的默认懒加载策略,即只有在调用到其关联对象的方法的时候才真正发出查询语句查询其对象数据,其关联对象是代理类

no-proxy:这种懒加载特性需要对类进行增强,使用no-proxy,其关联对象不是代理类

注意:在class标签上配置的lazy属性不会影响到关联对象!!!

0
0
查看评论

Hibernate中的lazy(懒加载)属性

只有在使用时,他才会发出SQL语句,查询数据,如果不使用对象则不会发出SQL语句进行查询。 Hibernate中lazy(懒加载)的实现: 采用第三方否组件库,这个库叫cglib.jar,这个库对我们的类生成代理类(),代理可以控制源对象并且可以对源对象的功能进行增强,而cglib.jar可以对...
  • fengxuezhiye
  • fengxuezhiye
  • 2012-03-21 11:26
  • 9480

【Hibernate】lazy的三种属性

懒加载: Hibernate的懒加载属性,很大程度上提高了了Hibernate框架的查询效率。 lazy有三个属性:true、false、extra 【true】:默认取值,它的意思是只有在调用这个集合获取里面的元素对象时,才发出查询语句,加载其     &#...
  • mrlin6688
  • mrlin6688
  • 2016-11-01 23:58
  • 312

Hibernate中lazy属性作用

Hibernate的检索策略包括类级别检索策略和关联级别检索策略。 类级别检索策略有立即检索和延迟检索,默认的检索策略是立即检索。在Hibernate映射文件中,通过在上配置 lazy属性来确定检索策略。对于Session的检索方式,类级别检索策略仅适用于load方法;也就说,对于get、qur...
  • QiuYqA
  • QiuYqA
  • 2017-01-14 11:36
  • 677

hibernate lazy属性参数说明

lazy,延迟加载 Lazy的有效期:只有在session打开的时候才有效;session关闭后lazy就没效了。 lazy策略可以用在: * 标签上:可以取值true/false * 标签上,可以取值true/false,这个特性需要类增强 * /等集合上,可以取值为true/false...
  • archer119
  • archer119
  • 2016-06-01 15:38
  • 1250

Hibernate Lazy属性

1 延迟加载策略   Hibernate 的延迟加载(lazy load)是一个被广泛使用的技术。这种延迟加载保证了应用只有在需要时才去数据库中抓取相应的记录。通过延迟加载技术可以避免过多、过早地加载数据表里的数据,从而降低应用的内存开销。Hibernate 的延迟加载本质上就是代理模式的应用...
  • a510750
  • a510750
  • 2017-07-27 17:48
  • 168

hibernate中lazy属性extra

<br /><br />Hibernate集合属性的懒加载策略: <br /><br />在集合属性上,可以配置懒加载策略,取值为:true/false/extra <br /><br />true:默认取值...
  • gyflyx
  • gyflyx
  • 2011-03-16 17:46
  • 5752

hibernate中lazy的使用

一: lazy,延迟加载 Lazy的有效期:只有在session打开的时候才有效;session关闭后lazy就没效了。 lazy策略可以用在: * 标签上:可以取值true/false * 标签上,可以取值true/false,这个特性需要类增强 * /等集合上,可以取值为true/f...
  • GeneralYY0
  • GeneralYY0
  • 2011-11-28 13:13
  • 5032

hibernate的抓取策略(fetch和lazy)

1,类级别: 通过load方法获取数据的时候,默认是懒加载的。如果是懒加载,则通过load方法获取数据时,只获取了id的值,只有使用到其他字段的值得时候,hibernate才会生成sql语句查询。可以在PO类对应的hbm.xml文件的中配置lazy属性为false取消延迟加载。取消以后,通过loa...
  • xzm_rainbow
  • xzm_rainbow
  • 2013-11-10 16:12
  • 1554

hibernate中的lazy的proxy no-proxy

举个例子吧: Child Parent class Child { private Parent parent; public Parent getParent (){ return this.parent;//访问了实例变量 } } class Parent { ...
  • woshixuye
  • woshixuye
  • 2012-01-28 08:25
  • 4054

Hibernate】Hibernate的检索策略:lazy、fetch

http://blog.csdn.net/vking_wang/article/details/8742573 原作者 检索策略 1、类级别和关联级别   可选的检索策略 默认值 受影响的检索方法 类级别 立即检索 ...
  • huchunbin
  • huchunbin
  • 2013-09-28 20:00
  • 2653
    个人资料
    • 访问:300840次
    • 积分:4895
    • 等级:
    • 排名:第6926名
    • 原创:170篇
    • 转载:253篇
    • 译文:5篇
    • 评论:30条
    最新评论