1. 程式人生 > >Hibernate的物件的3種狀態

Hibernate的物件的3種狀態

分別為:瞬時狀態(Transient)、持久狀態(Persistent)、遊離狀態(Detached)。處於持久狀態的物件也稱為PO(Persistence Object),瞬時物件和脫管物件也稱為VO(Value Object)。

 瞬時狀態:

 由new命令開闢記憶體空間的java物件,

 eg. Person person = new Person("xxx", "xx");

 如果沒有變數對該物件進行引用,它將被java虛擬機器回收。

 瞬時物件在記憶體孤立存在,它是攜帶資訊的載體,不和資料庫的資料有任何關聯關係,在Hibernate中,可通過session的save()或saveOrUpdate()方法將瞬時物件與資料庫相關聯,並將資料對應的插入資料庫中,此時該瞬時物件轉變成持久化物件。

 持久狀態:

       處於該狀態的物件在資料庫中具有對應的記錄,並擁有一個持久化標識。如果是用hibernate的delete()方法,對應的持久物件就變成瞬時物件,因資料庫中的對應資料已被刪除,該物件不再與資料庫的記錄關聯。

       當一個session執行close()或clear()、evict()之後,持久物件變成脫管物件,此時持久物件會變成脫管物件,此時該物件雖然具有資料庫識別值,但它已不在HIbernate持久層的管理之下。

       持久物件具有如下特點:

       1. 和session例項關聯;

       2. 在資料庫中有與之關聯的記錄

 遊離裝態

       當與某持久物件關聯的session被關閉後,該持久物件轉變為遊離物件。當遊離物件被重新關聯到session上時,並再次轉變成持久物件。

       遊離物件擁有資料庫的識別值,可通過update()、saveOrUpdate()等方法,轉變成持久物件。

       遊離物件具有如下特點:

       1. 本質上與瞬時物件相同,在沒有任何變數引用它時,JVM會在適當的時候將它回收;

       2. 比瞬時物件多了一個數據庫記錄標識值