Hibernate中get方法和load方法的區別

2022-08-29 03:57:13 字數 895 閱讀 1321

一、get和load方法都是根據id去獲得對應資料的,但是獲得機制不同:如果使用get方法,hibernate會去確認該id對應的資料是否存在,它首先會去session中去查詢(session快取其實就hibernate的一級快取),如果沒有,再去二級快取中去查詢,如果再沒有,就去資料庫中查詢,仍然沒有找到的話,就返回null

而使用load方法的話,hibernate會認定該id對應的資料一定存在,它也會先去session快取中去查詢,如果沒有找到,hibernate會根據lazy屬性值來確定是否使用延遲載入。如果lazy=『true』 ,就使用延遲載入,返回該**物件,等到真正訪問到該物件的屬性時才會去二級快取中查詢,如果沒有,再去資料庫中查詢,如果還沒有,就丟擲org.hibernate.objectnotfoundexception異常。如果lazy='false' 則不使用延遲載入,這是load的訪問機制就和get一樣了。

二、對於load和get方法返回型別:雖然好多書中都這麼說:「get()永遠只返回實體類」,但實際上這是不正確的,get方法如果在 session快取中找到了該id對應的物件,如果剛好該物件前面是被**過的,如被load方法使用過,或者被其他關聯物件延遲載入過,那麼返回的還是 原先的**物件,而不是實體類物件,如果該**物件還沒有載入實體資料(就是id以外的其他屬性資料),那麼它會查詢二級快取或者資料庫來載入資料,但是 返回的還是**物件,只不過已經載入了實體資料www.lefeng123.com

總之對於get和load的根本區別,一句話,hibernate對於load方法認為該資料在資料庫中一定存在,可以放心的使用**來延遲載入,如果在使用過程中發現了問題,只能拋異常;而對於get方法,hibernate一定要獲取到真實的資料,否則返回nullwww.tfjy386.com

Hibernate中get和load方法的區別

這次我們來談一下 hibernate3.2session 載入資料時 get和 load 方法的區別,其實這個在網上有很多的論述,可大多語焉不詳或經不起實踐的推敲,讓很多初學者學的滿腹疑竇,現在我給大家講解一下 1.對於 get方法,hibernate 會確認一下該 id對應的資料是否存在,首先在 ...

Hibernate中get和load方法的區別

這次我們來談一下hibernate3.2 session載入資料時get和load方法的區別 hibernate 3以後的版本就用get 方法取代find 這個方法了 其實這個在網上有很多的論述,可大多語焉不詳或經不起實踐的推敲,讓很多初學者學的滿腹疑竇,現在我給大家講解一下 1.對於hiberna...

hibernate的get和load方法的區別

訪問資料庫時機 name com.pojo.customer table cst customer lazy false public class customerdaotest 需求 通過id查詢指定的客戶資訊,有延遲 test public void load hibernate內建的連線池功能...