Hibernate對象狀態和Session方法——學習筆記
Session接口中方法:
1. clear 清除Session緩存中的內容
2. close 關閉Session對象
3. contains 判斷session內是否存在該持久化對象
4. delete 刪除session中的持久化對象
5. evict 清除session緩存當中的一個持久化對象
6. get 獲取一個持久化對象 如果數據庫沒有該對象則返回null
7. load 獲取一個持久化對象 如果數據庫沒有該對象則產生ObjectNotFoundExce
ption異常,load查詢出來的對象是一個延遲加載。
get和load方法可以不添加事務處理,查詢都可以不進行事務處理的添加。
8. lock 獲取一個帶樂觀鎖的持久化對象
10. persist 保存一個對象到持久化,當無事務時,不執行sql語句,不提交對象到數據庫中,有事務時與save方法相同。
11. save 保存一個對象到持久化,當無事務時,執行sql語句,對象插入數據庫,然后又回滾出來。
12. saveOrUpdate 保存或者更新一個對象到持久化狀態。
saveOrUpdate什么時候執行save?什么時候執行update呢?
當對象為瞬時狀態時,執行save方法。
當對象為托管狀態時執行update方法。
9. merge 更新一個脫管狀態對象到脫管狀態,它處理的對象總是脫管的。
13. update 更新一個脫管狀態對象到持久化狀態。
對象什么情況下為持久化狀態呢?
1. 對象在數據庫中有與之相對應的記錄,如果數據庫中無記錄就是瞬時態。
2. 對象與Session相關聯,當調用對象轉入到持久態的方法時,并且在事務提交之前。
持久化狀態當中的對象,當發生值的改變時,數據庫能檢測到,即修改數據庫內的數據。
當對象從持久化狀態出來后,即成為脫管狀態或者游離狀態。
對象什么情況下位脫管狀態或游離狀態?
1. 對象與Session之間沒有關聯,表示session調用evict,close,clear方法后就表示與對象無關聯。
2. 對象主鍵必須有值;如果主鍵為Integer類型,大于0表示有值,小于等于0表示無主鍵值;如果主鍵為String類型,無主鍵值那么為null,其他的就表示有主鍵。 那么對象無主鍵值就表示它是一個瞬時狀態。