hibernate 實體對象的三種狀態以及轉換關系。


最新的Hibernate文檔中為Hibernate對象定義了四種狀態(原來是三種狀態,面試的時候基本上問的也是三種狀態),分別是:瞬時態(new, or transient)、持久態(managed, or persistent)、游離態(detached)和移除態(removed,以前Hibernate文檔中定義的三種狀態中沒有移除態),如下圖所示,就以前的Hibernate文檔中移除態被視為是瞬時態。

  • 瞬時態:當new一個實體對象后,這個對象處於瞬時態,即這個對象只是一個保存臨時數據的內存區域,如果沒有變量引用這個對象,則會被JVM的垃圾回收機制回收。這個對象所保存的數據與數據庫沒有任何關系,除非通過Session的save()、saveOrUpdate()、persist()、merge()方法把瞬時態對象與數據庫關聯,並把數據插入或者更新到數據庫,這個對象才轉換為持久態對象。
  • 持久態:持久態對象的實例在數據庫中有對應的記錄,並擁有一個持久化標識(ID)。對持久態對象進行delete操作后,數據庫中對應的記錄將被刪除,那么持久態對象與數據庫記錄不再存在對應關系,持久態對象變成移除態(可以視為瞬時態)。持久態對象被修改變更后,不會馬上同步到數據庫,直到數據庫事務提交。
  • 游離態:當Session進行了close()、clear()、evict()或flush()后,實體對象從持久態變成游離態,對象雖然擁有持久和與數據庫對應記錄一致的標識值,但是因為對象已經從會話中清除掉,對象不在持久化管理之內,所以處於游離態(也叫脫管態)。游離態的對象與臨時狀態對象是十分相似的,只是它還含有持久化標識。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM