Hibernate中get和load有什麼不同之處?

學習筆記

1、Hibernate中get和load有什麼不同之處?

(1)Hibernate的get方法,會確認一下該id對應的數據是否存在,首先在session緩存中查找,然後在二級緩存中查找,還沒有就查詢數據庫,數據庫中沒有就返回null。
(2)Hibernate的load方法加載實體對象的時候,根據映射文件上類級別的lazy屬性的配置(默認爲true):
①若爲true,則首先在Session緩存中查找,看看該id對應的對象是否存在,不存在則使用延遲加載,返回實體的代理類對象(該代理類爲實體類的子類,由CGLIB動態生成)。等到具體使用該對象(除獲取OID以外)的時候,再查詢二級緩存和數據庫,若仍沒發現符合條件的記錄,則會拋出一個ObjectNotFoundException。
②若爲false,就跟Hibernate的get方法查找順序一樣,只是最終若沒發現符合條件的記錄,則會拋出一個ObjectNotFoundException,所說的load方法拋異常是指在使用該對象的數據時,數據庫中不存在該數據時拋異常,而不是在創建這個對象時。

2、Hibernate中save、update和saveOrUpdate方法的不同之處?

(1)save:執行保存操作的,對一個新new出來的對象進行保存,數據庫中沒有這個對象。如果數據庫中有,會報錯說有重複的記錄。
(2)update:如果是對一個已經存在的託管對象進行更新,要使用update()方法了,數據中有這個對象。
(3)saveOrUpdate:這個方法是更新或者插入,有主鍵就執行更新,如果沒有主鍵就執行插入。是根據實體類對象的狀態做的不同操作。
①實體類對象爲臨時態時做的添加save操作。
②實體類對象爲遊離態、持久態時做的修改update操作。


發佈了29 篇原創文章 · 獲贊 23 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章