學習筆記
1、Hibernate中get和load有什麼不同之處?
①若爲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操作。