1. 程式人生 > >Hibernate中Java物件的三種狀態以及之間的轉換 ----Hibernate_4

Hibernate中Java物件的三種狀態以及之間的轉換 ----Hibernate_4

Hibernate框架通過 Session來管理 Java物件的狀態

  1. 瞬時狀態
  2. 持久狀態
  3. 遊離狀態

瞬時狀態(Transient)

通過new 建立物件之後,並沒有立刻持久化,就是沒有儲存到資料庫,還儲存在記憶體中, 這就是瞬時狀態,Session對瞬時狀態是一無所知的,不受Session管理,如果物件沒有被引用,將會被垃圾回收機制處理

持久狀態(Persistent)

當物件與Session關聯,被Session管理時,它就處於持久狀態,處於持久狀態的物件擁有資料庫標識(主鍵值)例如剛從資料庫中查出的物件

遊離狀態(Detached)

處於持久狀態的物件,脫離預期關聯的Session管理後,物件就處於遊離狀態,Hibernate無法感知該物件的任何操作,


瞬時狀態轉為持久狀態:

   執行 Session的  save()  ,saveOrUpdate() 方法物件從瞬間狀態轉換為持久狀態,執行 Session的get(),load()方法獲取物件,該物件的狀態就是持久狀態

持久狀態轉為瞬間狀態 

    執行Session的delete()方法後 物件由原來的持久狀態變為瞬間狀態,此時該物件滅有與任何資料庫資料關聯


持久狀態轉為遊離狀態

    執行Session的evict()  ,clear()  ,close()   方法,物件由原來的持久狀態轉為 遊離狀態

遊離狀態轉為持久狀態

    重新獲取Session物件,執行 Session物件的update() ,saveOrUpdate()  方法 物件由遊離狀態轉為瞬間狀態 ,再次與Session關聯

遊離狀態轉為瞬時狀態

    執行Session的delete() 方法  物件由遊離狀態轉為瞬間狀態,

處於瞬間狀態或遊離狀態的物件不再被其他物件引用時,會被Java虛擬機器按照垃圾機制處理

在執行以上 方法之後必須 提交事務  否則就不會對資料庫有影響,  只有提交事務,hibernate才會執行sql語句,當然查詢除外