當前位置:才華齋>IT認證>SUN認證>

關於Hibernate應用中Java物件的狀態型別

SUN認證 閱讀(5.07K)

臨時狀態(Transient):也叫瞬時狀態。new出來的物件,沒有被持久化處理,不處於Session快取中的物件

關於Hibernate應用中Java物件的狀態型別

持久化狀態(Persistent):已經被持久化,加入到Session的快取中

遊離狀態(Detached):也叫脫管狀態。已經被持久化,但是不處在Session快取中

 ⑴臨時物件的特徵:

不處於Session快取中(不被任何一個Session例項關聯)

在資料庫中沒有對應的記錄

 進入臨時狀態的條件:

new一個Java物件,他處於臨時狀態,不和資料庫任何記錄關聯

Session的delete方法能夠是一個持久化物件或遊離物件轉變為臨時狀態;對於遊離物件,

delete方法從資料庫中刪除與它對應的記錄;對於持久化物件,delete方法從資料庫中刪除與它對應的記錄,

並把它從session快取中刪除

  ⑵持久化物件的特徵:

在一個Session例項的快取中(與一個Session關聯)

持久化物件和資料庫中的相關記錄對應

Session清理快取時,會根據持久化物件的屬性變化,來同步更新資料庫

  進入持久化狀態的條件

session的save方法

session的load和get方法返回的物件都是處於持久化狀態

session的find方法返回的List中存在的物件都是處於持久化狀態

session的update、saveOrUpdate和lock方法使得遊離物件轉換為持久化狀態

當一個持久化物件關聯一個臨時物件,在允許級聯儲存的情況下,Session在清理快取時把這個物件也轉變為持久化狀態

  ⑶遊離物件的特徵:

不再位於session快取中(遊離物件不被Session關聯)

遊離物件是從持久化物件轉變過來的,因此在資料庫中可能還存在與其對應的記錄

遊離物件與臨時物件的.區別在於:前者是由持久化物件轉變過來的,前者在資料庫中還存在與之對應的記錄,

而後者在資料庫中沒有與之對應的記錄;

  進入遊離狀態的條件

當呼叫session的close方法的時候,session快取被清空,快取中的所有持久化物件都變為遊離狀態。如果此時再沒有其它變數引用的時候,其生命週期結束

session的evict方法能夠從快取中刪除一個持久化物件,使它變為遊離狀態。如果記憶體中存在大量的物件的時候,可以通過這個方法來刪除快取中的物件(不建議使用這個方法,還是使用查詢的方法和常規方法來處理物件在記憶體 中的深度)