Hibernate之持久化對象的三種狀態

一、 瞬時對象(Transient Object):

使用new操作符初始化的對象不是立刻就持久的。它們的狀態是瞬時的,也就是說它們沒有任何跟數據庫表相關聯的行爲,只要應用不再引用這些對象(不再被任何其它對象所引用),它們的狀態將會丟失,並由垃圾回收機制回收

二、 持久化對象(Persistent Object):

持久實例是任何具有數據庫標識的實例,它有持久化管理器Session統一管理,持久實例是在事務中進行操作的----它們的狀態在事務結束時同數據庫進行同步。當事務提交時,通過執行SQL的INSERT、UPDATE和DELETE語句把內存中的狀態同步到數據庫中。

三、 離線對象(Detached Object):

Session關閉之後,持久化對象就變爲離線對象。離線表示這個對象不能再與數據庫保持同步,它們不再受hibernate管理。

 

 


四、 三種狀態的區分:

1、  有沒有ID,(如果沒有則是Transient狀態)

2、  ID在數據庫中有沒有

3、  在內存裏有沒有(session緩存)

五、 總結:

Transient對象:隨時可能被垃圾回收器回收(在數據庫中沒有於之對應的記錄,應爲是new初始化),而執行save()方法後,就變爲Persistent對象(持久性對象),沒有納入session的管理

                            內存中一個對象,沒有ID,緩存中也沒有

Persistent對象:在數據庫有存在的對應的記錄,納入session管理。在清理緩存(髒數據檢查)的時候,會和數據庫同步。

                            內存中有、緩存中有、數據庫有(ID)

Detached對象:也可能被垃圾回收器回收掉(數據庫中存在對應的記錄,只是沒有任何對象引用它是指session引用),注引狀態經過Persistent狀態,沒有納入session的管理

內存有、緩存沒有、數據庫有(ID)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章