1. 程式人生 > >hibernate中物件的3種狀態 瞬時態、持久態、脫管態

hibernate中物件的3種狀態 瞬時態、持久態、脫管態

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

瞬時態

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

舉例: Person person = new Person("amigo", "女");

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

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

持久態

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

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

       持久物件具有如下特點:

       1. 和session例項關聯;

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

託管態

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

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

       脫管物件具有如下特點:

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

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