1. 程式人生 > >Hibernate中物件的三種狀態,以及三種狀態間的轉化方法

Hibernate中物件的三種狀態,以及三種狀態間的轉化方法

在Hibernate中有三種狀態,對它的深入理解,才能更好的理解hibernate的執行機理,剛開始不太注意這些概念,後來被別人問到了,說是面試題,才發現它是重要的。對於需要持久化的JAVA物件,在它的生命週期中有三種狀態,而且互相轉化。

Hibernate三種狀態之一:臨時狀態(Transient):也叫瞬時狀態,在一個物件剛被建立的時候,比如People people = new People(),它沒有持久化,並沒有處於Session的快取中,這種狀態的物件叫就是臨時物件;

Hibernate三種狀態之二:持久化狀態(Persistent):已經執行了session的save()方法,已經持久化,加入到了Session快取中,並且在資料庫中具有對應的記錄,並擁有一個持久化標識。處於此狀態的物件叫持久物件。

此時如果使用hibernate的delete()方法,對應的持久物件就變成上面的瞬時物件,因為資料庫中的對應資料已被刪除,該物件不再與資料庫的記錄關聯。  持久物件具有如下特點:    1. 和session例項關聯;   2. 在資料庫中有與之關聯的記錄。 

 當一個session執行close()或clear()、evict()之後,持久物件變成下面要講的脫管物件,此時持久物件會變成脫管物件,此時該物件雖然具有資料庫識別值,但它已不在HIbernate持久層的管理之下,也就是它在session快取中的記錄已經被刪除了。 

Hibernate三種狀態之三:遊離狀態(Detached):也叫脫管狀態

持久化物件脫離了Session的物件。如當session關閉時,Session快取被清空的物件。特點:已經持久化,但不在Session快取中。處於此狀態的物件叫遊離物件;因關閉session而變成遊離態的可以通過lock、save、update變成持久態 。