1. 程式人生 > >Hibernate框架中物件的三種狀態

Hibernate框架中物件的三種狀態

一、三種狀態簡介

1、瞬時態:transient,session沒有快取物件,資料庫也沒有對應記錄。

直白說就說:沒有與Hibernate產生關聯也沒有與資料庫裡的記錄產生關聯(有關聯就是與資料庫中的ID有對應)

2、持久態:persistent,session快取物件,資料庫有記錄。

3、託管態(遊離態):detached,session沒有快取物件,資料庫有記錄。

二、三種狀態之間的相互轉換

1、瞬時態/臨時態

獲得:一般都只直接建立(new)

瞬時態轉換為持久態:save方法、saveOrUpdate

瞬時態轉換為遊離態:通過setId方法設定資料

例如: User user = new User();   //瞬時態

           user.setUid(1);   //遊離態

2、持久態

獲得:查詢操作:get、load、createQuery、createCriteria等

         執行save之後是持久態

         執行update之後是持久態

持久態轉換為瞬時態:delete()

持久態轉換為遊離態:session沒有記錄

        session.close()  關閉

        session.clear()  清除所有

        session.evict(obj)  清除指定的PO物件

3、託管態/遊離態

獲得:建立並設定OID,通過api獲得

遊離態轉換為瞬時態:手動去除OID,設定成預設值

遊離態轉換為持久態:update()、saveOrUpdate()

三、三種狀態有什麼用?

    我們使用Hibernate主要是為了持久化我們的資料。對於物件的狀態,我們期望我們需要同步到資料庫中的資料都被轉換為持久狀態。持久化狀態的特點:Hibernate會自動將持久化狀態物件的變化同步到資料庫中。