Hibernate對象三種狀態:臨時狀態、持久狀態和遊離狀態

我們經過 get load Query對象取出的數據 都是持久態的
1.爲何叫持久態的呢 是我們在 事物提交時候 若是提交了這個對象 這個對象以前的操做都會被存入數據庫
持久態只有在事物提交後才能真正的持久 也就是數據庫數據改變 這就是持久態的終極意義

2.哪些對象是遊離態的呢 是從持久化的數據轉化而來 好比你session關閉 或者從session裏delete了這個對象等
這個時候 hibernate定義了這種對象就叫遊離態的了 若是你在事物提交裏面以前改變了這個對象 是不會反應到數據庫裏面 這就是遊離的特徵 講完了 而後講瞬時
3.瞬時最簡單 和hibernate session無關 就是我們直接new的對象 hibernate叫他瞬時態對象
他和遊離同樣 事物提交也不能改變數據庫對應的數據


有人說 我想把瞬時對象和遊離對象要變成持久的怎麼辦
hibernate提供的 save update等方法就是把非持久化的對象變成持久態的了。 html

臨時狀態(Transient):當new一個實體對象後,這個對象處於臨時狀態,即這個對象只是一個保存臨時數據的內存區域,若是沒有變量引用這個對象,則會被jre垃圾回收機制回收。這個對象所保存的數據與數據庫沒有任何關係,除非經過Session的save或者SaveOrUpdate把臨時對象與數據庫關聯,並把數據插入或者更新到數據庫,這個對象才轉換爲持久對象。 數據庫

持久狀態(Persistent): 持久化對象的實例在數據庫中有對應的記錄,並擁有一個持久化表示(ID)。對持久化對象進行delete操做後,數據庫中對應的記錄將被刪除,那麼持久化對象與數據庫記錄再也不存在對應關係,持久化對象變成臨時狀態。持久化對象被修改變動後,不會立刻同步到數據庫,直到數據庫事務提交。在同步以前,持久化對象是髒的(Dirty)。 session

遊離狀態(Detached):當Session進行了Close、Clear或者evict後,持久化對象雖然擁有持久化標識符和與數據庫對應記錄一致的值,可是由於會話已經消失,對象不在持久化管理以內,因此處於遊離狀態(也叫:脫管狀態)。遊離狀態的對象與臨時狀態對象是十分類似的,只是它還含有 持久化標識。 url

其中,持久化狀態的對象,簡稱爲:PO(Persistence Object) spa

而臨時狀態和遊離狀態的對象,簡稱爲: VO(Value Object) hibernate

下圖是Hibernate下對象狀態的變化關係示意圖: htm

Hibernate對象三種狀態:臨時狀態、持久狀態和遊離狀態

相關文章
相關標籤/搜索