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

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

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

 

 

 

Load的加载方式:
一、Load采用延迟加载的方式,hibernate的思想是既然这个方法支持延迟加载,它就认为这个对象必定在数据库中存在,能够放心的使用代理来延迟加载,若是在使用过程当中出现了问题就放心的抛异常
二、Load方法会首先查询session缓存,看缓存中有没有这个对象
三、若是缓存中没有这个对象就会去建立个代理对象来管理,由于延迟加载须要代理来执行。可是并无去数据库中查询
四、只有当你实际使用这个对象的时候,它才会触发sql语句。这个时候hibernate就会去查询二级缓存和数据库,若是数据库中没有这条语句,就抛出异常ObjectNotFoundException。缓存

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

 

 

 

关系的延迟加载:spa

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

 

 

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

 


 

 

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

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

 

 


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

相关文章
相关标签/搜索