Hibernate框架中物件的三種狀態
阿新 • • 發佈:2019-01-28
一、三種狀態簡介
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會自動將持久化狀態物件的變化同步到資料庫中。