持久化物件狀態和一級快取
阿新 • • 發佈:2018-11-29
1.持久化物件的三種狀態
- transient 瞬時態(臨時態,自由態):不存在持久化標識OID,尚未與Hibernate Session 關聯物件,被認為處於瞬時態,失去引用將被JVM回收 OID就是物件中與資料庫主鍵對映屬性,例如Customer類 id屬性
- persistent 持久態:存在持久化標識OID,與當前session有關聯,並且相關聯的session沒有關閉,並且事務未提交
- detached脫管態(離線態,遊離態):存在持久化標識OID,但沒有與當前session關聯,脫離態狀態改變Hibernate不能檢測到
瞬時與持久化狀態區別在於是否在於納入session管理是否有oid
持久和脫管狀態區別在於是否納入session管理
瞬時與脫管狀態是否有OID
Hibernate持久化物件的狀態轉換圖:
1.瞬時狀態切換到其它狀態 ew出來
- 瞬時--持久 save saveorUpdate (都是Session)
- 瞬時--脫管 book.setId (1);為瞬時物件設定OID
2,持久化物件切換到其它狀態 get/load query查詢
- 持久--瞬時 delete (被刪除持久化物件不建議再次使用)
- 持久--脫管 evict(清除一級快取中某一個物件),close (關閉Session,清除一級快取) ,.clear (清除一級快取所直物件)
3,脫管狀態切換到其它狀態(無法直接得到)
- 脫管--瞬時 book. setId (null) ;刪除物件OID
- 脫管-掛久 update, saveorUpdate, lock (過時)