hibernate 中get與load的區別

2022-07-10 18:48:02 字數 929 閱讀 6747

呵呵,沒有說到根本點上,hibernate中get方法和load方法的根本區別在於:如果你使用load方法,hibernate認為該id對應的物件(資料庫記錄)在資料庫中是一定存在的,所以它可以放心的使用,它可以放心的使用**來延遲載入該物件。在用到物件中的其他屬性資料時才查詢資料庫,但是萬一資料庫中不存在該記錄,那沒辦法,只能拋異常,所說的load方法拋異常是指在使用該物件的資料時,資料庫中不存在該資料時拋異常,而不是在建立這個物件時。

由於session中的快取對於hibernate來說是個相當廉價的資源,所以在load時會先查一下session快取看看該id對應的物件是否存在,不存在則建立**。所以如果你知道該id在資料庫中一定有對應記錄存在就可以使用load方法來實現延遲載入。

對於get方法,hibernate會確認一下該id對應的資料是否存在,首先在session快取中查詢,然後在二級快取中查詢,還沒有就查資料庫,資料庫中沒有就返回null。

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

3。胡說八道,前面已經講了,get方法首先查詢session快取,沒有的話查詢二級快取,最後查詢資料庫;反而load方法建立時首先查詢session快取,沒有就建立**,實際使用資料時才查詢二級快取和資料庫。

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

http中get和post的區別

1.get從伺服器上獲取資料,post是向伺服器傳送資料 2.在客戶端,get方式在通過url提交資料,資料在url中可以看到,post方式,資料放置在html header內提交 3.get方法提交的資料長度受瀏覽器upl的限制,一般不能大於2k,而post沒有限制 4.對於get方式,伺服器端用...

Hibernate體系結構與工作原理

的初始化.讀取hibernate的配置資訊 建立session factory1 建立configeration類的例項。它的構造方法 將配置資訊 hibernate 讀入到記憶體。乙個configeration例項代表hibernate所有j a類到sql資料庫對映的集合。2 建立sessionf...

L298中文與例項

雙全橋步進電機專用驅動晶元 dual full bridge driver l298中文資料 l298n 為sgs thomson microelectronics 所出產的雙全橋步進電機專用驅動晶元 dual full bridge driver 內部包含4通道邏輯驅動電路,是一種二相和四相步進電...