天天看點

Hibernate對象狀态之間的神奇轉換

狀态分類

在Hibernate架構中,為了管理持久化類,Hibernate将其分為了三個狀态:

  1. 瞬時态(Transient Object)
  2. 持久态(Persistent Object)
  3. 脫管态(Detached Object)

有很多人好像對這些概念和它們之間的轉換不太明白,那麼本篇文章就是來解決這些問題的,看完了還不會你來找我。(開個玩笑~~)

較長的描述

我們先來詳細地了解一下三種狀态:

1、瞬時态

對象由new操作符建立,且尚未與Hibernate中的Session關聯的對象被認為處于瞬時态。瞬時态對象不會被持久化到資料庫中,也不會賦予持久化辨別,如果程式中失去了瞬時态對象的引用,瞬時态對象将被垃圾回收機制銷毀。

2、持久态

持久化執行個體在資料庫中有對應的記錄,并擁有一個持久化辨別。持久化的執行個體可以是剛剛儲存的,也可以是剛剛被加載的。無論哪一種,持久化對象都必須與指定的Session對象關聯。

3、脫管态

某個執行個體曾經處于持久化狀态,但随着與之關聯的Session被關閉,該對象就變成脫管狀态。脫管狀态的引用引用依然有效,對象可繼續被修改。如果重新讓脫管對象與某個Session關聯,該脫管對象會重新轉換為持久化狀态。

瞬時态 持久态 脫管态
是否存于Session緩存中 × ×
資料庫中是否有對應記錄 ×

例如: