hibernate延遲載入

2021-08-30 18:33:15 字數 1575 閱讀 3266

在hibernate應用中,有時候只訪問指定的持久化物件,在載入該物件時沒有必要載入其關聯的物件,以免浪費記憶體空間,但若想在session關閉後正常訪問該物件,必須在載入該物件時,一起載入該物件的關聯物件,為了滿足檢索持久化物件的不同情況的需求,開發靈活高效的hibernate應用,hibernate提供的三種檢索策略:立即檢索、延遲檢索(載入)和迫切連線檢索。

在hibernate 3中為了提高效率、節省記憶體,預設的載入模式是延遲載入,也就是說沒有在orm配置檔案中顯示指定lazy引數的引數的話,laze的預設值是true,hibernate將預設為延遲載入,例如:有2個持久化物件:ttask和tusers

其中tusers是ttask的乙個多對一的關聯物件,ttask.hbm.xml中配置內容為:

測試程式段:

public void test(){

session session=hibernatesessionfactory.getsession();

query q=session.createquery("from ttask");

list list=q.list(); (1)

hibernatesessionfactory.closesession();

for(int i=0;i標籤,可以取值true/false

標籤,可以取值true/false

標籤,可以取值true/false/extra

單端關聯,可以取值:false/proxy/noproxy

load支援lazy,get不支援,無論持久化類設定與否,都會立即檢索。

(1)class標籤

預設為true

class上的lazy,只對普通屬性起作用,對集合和不起作用

即:如果乙個類裡有set集合成員變數和需要用來對映的成員變數,即使在class裡設定lazy為false,他們在使用之前也不會載入。需要單獨設定lazy,也就是lazy的另外兩個用法。

如果在使用load載入了某個物件,但是沒有使用,即沒有發出sql語句,就把session給關了,此時,如果再使用這個物件就會丟擲lazyinitalizationexception。因為物件並沒有載入上來,因為使用了lazy策略,只是載入了類的乙個**子類。

(2)集合

預設為true

預設為true情況下,只要使用到了set物件,就會把整個set全部查詢出來。

false情況下,不使用lazy,查詢lazy所屬的物件時,set就會被查詢上來。需要類增強工具。

extra情況下,比較智慧型,根據查詢的內容,生成不同的sql語句。效率會高一些。

(3)單端關聯

預設為proxy

false:不使用lazy。

noproxy:需要類增強工具

(4)property

預設false

true:較少使用,如果某個欄位是內容量比較大,可以設定為true,在真正使用的時候再載入。可以提高效率。

Hibernate 延遲載入和立即載入

概念 什麼是延遲載入 所謂延遲載入就是當在真正需要資料的時候,才真正執行資料載入操作。可以簡單理解為,只有在使用的時候,才會發出sql語句進行查詢,資料是分n次讀取。一 延遲載入 nhibernate延遲載入須有session存在,且配置為lazy true 預設 dal中編寫方法如下 延遲載入 p...

Hibernate 延遲載入和立即載入

概念 什麼是延遲載入 所謂延遲載入就是當在真正需要資料的時候,才真正執行資料載入操作。可以簡單理解為,只有在使用的時候,才會發出sql語句進行查詢,資料是分n次讀取。一 延遲載入 nhibernate延遲載入須有session存在,且配置為lazy true 預設 dal中編寫方法如下 延遲載入 p...

Hibernate 延遲載入和立即載入

延遲載入 延遲載入 lazy load懶載入 是當在真正需要資料時,才執行sql語句進行查詢,避免了無謂的效能開銷。延遲載入分類 01.類級別的查詢策略 02.一對多和多對多關聯的查詢策略 03.多對一關聯的查詢策略 如果程式載入乙個物件的目的是為了訪問它的屬性,可採取立即檢索,如果程式載入乙個持久...