欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Hibernate(四)--延迟加载(lazyload)

程序员文章站 2023-03-26 16:29:46
hibernate中的延迟加载(lazyload)分属性的延迟加载和关系的延迟加载 属性的延迟加载: 当使用load的方式来获取对象的时候,只有访问了这个对象的属性,hibernate才会到数据库中进行查询。否则不会访问数据库 Load的加载方式:1、Load采用延迟加载的方式,hibernate的 ......

hibernate中的延迟加载(lazyload)分属性的延迟加载关系的延迟加载

属性的延迟加载:
    当使用load的方式来获取对象的时候,只有访问了这个对象的属性,hibernate才会到数据库中进行查询。否则不会访问数据库

Hibernate(四)--延迟加载(lazyload)

 

 

 

load的加载方式:
1、load采用延迟加载的方式,hibernate的思想是既然这个方法支持延迟加载,它就认为这个对象一定在数据库中存在,可以放心的使用代理来延迟加载,如果在使用过程中出现了问题就放心的抛异常
2、load方法会首先查询session缓存,看缓存中有没有这个对象
3、如果缓存中没有这个对象就会去创建个代理对象来管理,因为延迟加载需要代理来执行。但是并没有去数据库中查询
4、只有当你实际使用这个对象的时候,它才会触发sql语句。这个时候hibernate就会去查询二级缓存和数据库,如果数据库中没有这条语句,就抛出异常objectnotfoundexception。

hibernate load方法加载实体对象的时候,会根据映射文件上 类级别 lazy属性值的配置,分情况讨论:
(1)若为true,即为延迟加载,就是上面的模式
(2)若为false,即为非延迟加载,即立即加载。就跟get方法查找顺序一样,只是最终若没发现符合条件的记录,则会抛出一个objectnotfoundexception。

 

 

 

关系的延迟加载:

    one-many many-many的时候都可以使用关系的延迟加载

Hibernate(四)--延迟加载(lazyload)

 

 

 元素中的lazy属性的可选值为:true(延迟加载),extra(增强延迟加载)和false(立即加载);
 元素中的lazy属性的默认值为true
     extra其实是一种比较智能的延迟加载,即调用集合的size/contains等方法的时候,hibernate并不会去加载整个集合的数据,而是发出一条聪明的sql语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据。

 


 

 

hibernate在对象关系映射文件中配置加载策略的方式:(lazy)
1、类级别
元素中lazy属性的可选值为true(延迟加载)和false(立即加载);
元素中的lazy属性的默认值为true

Hibernate(四)--延迟加载(lazyload)

2、一对多关联级别:
元素中的lazy属性的可选值为:true(延迟加载),extra(增强延迟加载)和false(立即加载);
元素中的lazy属性的默认值为true
     extra其实是一种比较智能的延迟加载,即调用集合的size/contains等方法的时候,hibernate并不会去加载整个集合的数据,而是发出一条聪明的sql语句,以便获得需要的值,只有在真正需要用到这些集合元素对象数据的时候,才去发出查询语句加载所有对象的数据。

Hibernate(四)--延迟加载(lazyload)

 

 


3、多对一关联级别:
元素中lazy属性的可选值为:proxy(延迟加载),no-proxy(无代理延迟加载)和false(立即加载)
元素中的lazy属性的默认值为proxy

Hibernate(四)--延迟加载(lazyload)