load和get之Hibernate的延遲載入機制

2021-09-22 03:34:50 字數 1692 閱讀 3234

在hibernate中:

如果你使用load方法,hibernate認為該id對應的物件(資料庫記錄)在資料庫中是一定存在的,所 以它可以放心的使用,它可以放心的使用**來延遲載入該物件。在用到物件中的其他屬性資料時才查詢資料庫,但是萬一資料庫中不存在該記錄,那沒辦法,只能拋異常

objectnotfoundexception。

下面是使用load查詢物件的時候,物件不存在的情況下的hibernate處理機制。

public

void testquertnotexistbyloadmethod() catch (exception e)  finally  

} 下面是除錯情況下的截圖:

使用load載入資料的時候,這裡的id="不存在"在資料庫中並不存在資料,將會丟擲異常。

當使用get方法的時候當查詢的資料資料庫不存在的時候將返回null.

下面是通過查詢資料庫已有的資料,然後修改持久化資料,檢視**類的狀態。

public

void testquertnotexist() catch (exception e)  finally  

} person類的物件p是存在的,當程式執行到system.out.println(p.tostring()); 的時候控制台輸出

hibernate: select person0_.perid as perid0_0_, person0_.pernamee as pernamee0_0_, person0_.creattime as creattime0_0_ from ext.dbo.person person0_ where person0_.perid=? 

person [creattime=2012-07-20 06:14:21.173, perid=8aab8c8538a101310138a10132190001, pername=孫悟空] 

檢視執行過程的**類的資訊:

**類的target目標下的資訊和查詢到的資訊一相同的。當更新持久化物件p的建立時間的時候由於traget不為空,表示session快取中存在物件,而且此刻p物件仍然在接收著session的管理,所以可以控制台中顯示出有更新語句的產生。       當然如果沒有查詢到資料這裡的traget自然就為空了。 

hibernate: select person0_.perid as perid0_0_, person0_.pernamee as pernamee0_0_, person0_.creattime as creattime0_0_ from ext.dbo.person person0_ where person0_.perid=? 

person [creattime=2012-07-20 06:15:58.167, perid=8aab8c8538a101310138a10132190001, pername=孫悟空] 

hibernate: update ext.dbo.person set pernamee=?, creattime=? where perid=? 

get和load的根本區別:hibernate對於load方法認為該資料在資料庫中一定存在,可以放心的使用**來延遲載入,如果在使用過程中發現了問題,就拋異常;而對於get方法,hibernate一定要獲取到真實的資料,否則返回null。load方法具有延遲載入的功能,而get方法沒有。

Hibernate查詢之get和load的區別

load方式檢索不到的話會丟擲org.hibernate.objectnotfoundexception異常 get方法檢索不到的話會返回null get方法和find方法都是直接從資料庫中檢索 而load方法的執行則比較複雜 首先查詢session的persistent context中是否有快取...

Hibernate之load和get的區別

load和get都會可以起到從資料庫中獲取持久態資料的作用,但是還有些稍微的區別的。test expected illegalargumentexception.class public void testlazyload throws exception catch objectnotfounde...

get 和load 的區別

get 方法直接返回實體類,如果查不到資料則返回null。load 會返回乙個實體 物件 當前這個物件可以自動轉化為實體物件 但當 物件被呼叫時,如果資料不存在,則會丟擲 org.hibernate.objectnotfoundexception異常 load 先到快取 session快取 二級快取...