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

相關文章
相關標籤/搜索