當前位置:學者齋 >

IT認證 >SUN認證 >

關於Hibernate應用中Java對象的狀態類型

關於Hibernate應用中Java對象的狀態類型

臨時狀態(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方法能夠從緩存中刪除一個持久化對象,使它變為遊離狀態。如果內存中存在大量的對象的時候,可以通過這個方法來刪除緩存中的對象(不建議使用這個方法,還是使用查詢的方法和常規方法來處理對象在內存 中的深度)

標籤: Hibernate JAVA
  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-hk/itrz/sun/0l901w.html