Hibernate 中 load 方法簡介

2021-08-22 18:58:39 字數 1282 閱讀 9412

接觸過 hibernate 的朋友都知道 session 中的 get 方法,而對於 load 方法,能夠深入了解的人便不是很多。其實,如果能正確地是用 load 方法,可以是你的應用更加有效率;但是,load 方法的使用又會帶來一些錯誤。實際上,只要我們能正確了解 load 方法,就避免這些錯誤的發生。下面,我以問答的形式簡單介紹一下 load 方法。

load 方法的返回值是什麼?

這要分兩種情況了。第一種情況,如果是 load 某個已在 session 中存在的 object,即你要 load 的 object 已經是 persistent 狀態了。那麼,load 方法返回的物件便是這個 object 的引用。在這種情況下,load 和 get 的返回值是一樣的。第二種情況,如果 session 中沒有你所要 load 的資料,那 load 方法將會返回乙個 hibernateproxy。

load 方法總是不 hit 資料庫?那我怎麼知道 load 的資料是否存在?

如果是 load session 中已有的資料,自然不需要 hit 資料庫。如果所 load 的物件在 session 中不存在,load 方法將返回乙個 proxy,這時也不 hit 資料庫。當你要方法 proxy 所代表的實體中的除主鍵外的屬性的話,如果這個時候 session 中還是沒有相應的物件的話,hibernate 就將 hit 資料庫,並進行 proxy 的初始化。如果資料庫中沒有相應的資料,load 便會丟擲異常。這也是 load 方法與 get 方法不同的地方,在資料不存在的情況下,get 返回 null,而 load 則丟擲異常。

load 的方法都會丟擲哪些異常?

常見的由 load 引起的 exception 有兩種:objectnotfoundexception 和 lazyinitializationexception。前者是由於所 load 的資料在資料庫中並不存在引起的。後者一般是由於 load 方法使用不正確造成的:得到由 load 返回的 proxy 之後,在 session 關閉的情況下 init proxy 就會得到 lazyinitializationexception。

另外,在使用 load 設定引用屬性值的時候,還可能出現違法外來鍵約束的異常。簡言之,只要確保你 load 資料是存在的,並且在 proxy 初始化的時候保證 session 是開啟的就能避免這些 exception 的出現。

什麼時候使用 load 方法?

簡單說來,當你只想取得對資料庫中一條記錄的引用,而不是想的這條記錄中的資料的時候(比如設定外來鍵關係),就可以使用 load 而不是 get 方法。這樣可以避免不必要的資料庫訪問。但是,使用 load 要格外小心,因為它比 get 方法更容易出問題。

Hibernate中get和Load比較

load支援延遲載入.它認為該資料是一定存在的,所以會使用 進行延遲載入.若資料不存在,只能拋異常.get方法,不支援延遲載入.若資料不存在就直接返回null.load方法拋異常是指在使用該物件的資料時,資料庫中不存在該資料時拋異常,而不是在建立這個物件時。在load時會先去查一下session快取...

hibernate中get和load載入的不同之處

在hibernate中我們知道如果要從資料庫中得到乙個物件,通常有兩種方式,一種是通過session.get 方法,另一種就是通過session.load 方法,然後其實這兩種方法在獲得乙個實體物件時是有區別的,在查詢效能上兩者是不同的。1.首先,如果用的是get去載入,然後得到的乙個物件,這個過程...

hibernate中get 與 load 區別

session.get 與 session.load區別 1.對於get方法,hibernate會確認一下該id對應的資料是否存在,首先在session快取中查詢,然後在二級快取中查詢,還沒有就查詢資料庫,資料庫中沒有就返回null。2.load方法載入實體物件的時候,根據對映檔案上類級別的lazy...