第四章 Hibernate中的持久化對象的生命周期
4.1提供對象狀態管理的目的
使開發者不再需要理會底層數據庫係統的細節
使用Hibernate的開發者應該總是關注對象的狀態(state),不必考慮SQL語句的執行
4.2 Hibernate 僅僅定義了三種狀態:瞬時(臨時)、持久和脫管(遊離),對客戶端代碼隱藏了其內部實現的複雜性
4.2.1 瞬時對象(Transient Object):Hibernate中的持久化對象的生命周期
使用new操作符初始化的對象不是立刻就持久的。它們的狀態是瞬時的,也就是說它們沒有任何跟數據庫表相關聯的行為,隻要應用不再引用這些對象(不再被任何其它對象所引用),它們的狀態將會丟失,並由垃圾回收機製回收
4.2.2持久化對象(Persistent Object):
持久實例是任何具有數據庫標識的實例,它有持久化管理器Session統一管理,持久實例是在事務中進行操作的----它們的狀態在事務結束時同數據庫進行同步。當事務提交時,通過執行SQL的INSERT、UPDATE和DELETE語句把內存中的狀態同步到數據庫中。
4.2.3遊離對象(Detached Object):
Session關閉之後,持久化對象就變為遊離對象。遊離表示這個對象不能再與數據庫保持同步,它們不再受hibernate管理。
4.3三種狀態相互轉換的說明
4.4總結:
Transient對象:隨時可能被垃圾回收器回收(在數據庫中沒有於之對應的記錄,應為是new初始化),而執行save()方法後,就變為Persistent對象(持久性對象)。沒有納入session的管理。內存中一個對象,沒有ID,緩存中也沒有。
Persistent對象:在數據庫有存在的對應的記錄,納入session管理。在清理緩存(髒數據檢查)的時候,會和數據庫同步。內存中有、緩存中有、數據庫有(ID)。
Detached對象:也可能被垃圾回收器回收掉(數據庫中存在對應的記錄,隻是沒有任何對象引用它是指session引用),注引狀態經過Persistent狀態,沒有納入session的管理。
最後更新:2017-04-03 18:51:59