- 相關推薦
關于Hibernate應用中Java對象的狀態(tài)類型
臨時狀態(tài)(Transient):也叫瞬時狀態(tài)。new出來的對象,沒有被持久化處理,不處于Session緩存中的對象
持久化狀態(tài)(Persistent):已經被持久化,加入到Session的緩存中
游離狀態(tài)(Detached):也叫脫管狀態(tài)。已經被持久化,但是不處在Session緩存中
⑴臨時對象的特征:
不處于Session緩存中(不被任何一個Session實例關聯)
在數據庫中沒有對應的記錄
進入臨時狀態(tài)的條件:
new一個Java對象,他處于臨時狀態(tài),不和數據庫任何記錄關聯
Session的delete方法能夠是一個持久化對象或游離對象轉變?yōu)榕R時狀態(tài);對于游離對象,
delete方法從數據庫中刪除與它對應的記錄;對于持久化對象,delete方法從數據庫中刪除與它對應的記錄,
并把它從session緩存中刪除
、瞥志没瘜ο蟮奶卣:
在一個Session實例的緩存中(與一個Session關聯)
持久化對象和數據庫中的相關記錄對應
Session清理緩存時,會根據持久化對象的屬性變化,來同步更新數據庫
進入持久化狀態(tài)的條件
session的save方法
session的load和get方法返回的對象都是處于持久化狀態(tài)
session的find方法返回的List中存在的對象都是處于持久化狀態(tài)
session的update、saveOrUpdate和lock方法使得游離對象轉換為持久化狀態(tài)
當一個持久化對象關聯一個臨時對象,在允許級聯保存的情況下,Session在清理緩存時把這個對象也轉變?yōu)槌志没癄顟B(tài)
、怯坞x對象的特征:
不再位于session緩存中(游離對象不被Session關聯)
游離對象是從持久化對象轉變過來的,因此在數據庫中可能還存在與其對應的記錄
游離對象與臨時對象的區(qū)別在于:前者是由持久化對象轉變過來的,前者在數據庫中還存在與之對應的記錄,
而后者在數據庫中沒有與之對應的記錄;
進入游離狀態(tài)的條件
當調用session的close方法的時候,session緩存被清空,緩存中的所有持久化對象都變?yōu)橛坞x狀態(tài)。如果此時再沒有其它變量引用的時候,其生命周期結束
session的evict方法能夠從緩存中刪除一個持久化對象,使它變?yōu)橛坞x狀態(tài)。如果內存中存在大量的對象的時候,可以通過這個方法來刪除緩存中的對象(不建議使用這個方法,還是使用查詢的方法和常規(guī)方法來處理對象在內存 中的深度)
【Hibernate應用中Java對象的狀態(tài)類型】相關文章:
Java中基本數據類型與應用07-27
Java內存溢出的類型10-03
JAVA認證開源技術:關于Java的對象equals方法06-26
Java基本數據類型09-20
java面向對象編程題庫及答案07-28
JAVA面向對象的三大特性06-14
小學應用題類型09-13
java數據類型和運算符10-24