狀态分類
在Hibernate架構中,為了管理持久化類,Hibernate将其分為了三個狀态:
- 瞬時态(Transient Object)
- 持久态(Persistent Object)
- 脫管态(Detached Object)
有很多人好像對這些概念和它們之間的轉換不太明白,那麼本篇文章就是來解決這些問題的,看完了還不會你來找我。(開個玩笑~~)
較長的描述
我們先來詳細地了解一下三種狀态:
1、瞬時态
對象由new操作符建立,且尚未與Hibernate中的Session關聯的對象被認為處于瞬時态。瞬時态對象不會被持久化到資料庫中,也不會賦予持久化辨別,如果程式中失去了瞬時态對象的引用,瞬時态對象将被垃圾回收機制銷毀。
2、持久态
持久化執行個體在資料庫中有對應的記錄,并擁有一個持久化辨別。持久化的執行個體可以是剛剛儲存的,也可以是剛剛被加載的。無論哪一種,持久化對象都必須與指定的Session對象關聯。
3、脫管态
某個執行個體曾經處于持久化狀态,但随着與之關聯的Session被關閉,該對象就變成脫管狀态。脫管狀态的引用引用依然有效,對象可繼續被修改。如果重新讓脫管對象與某個Session關聯,該脫管對象會重新轉換為持久化狀态。
瞬時态 | 持久态 | 脫管态 | |
---|---|---|---|
是否存于Session緩存中 | × | √ | × |
資料庫中是否有對應記錄 | × | √ | √ |
例如: