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

瞬時態(tài):當new一個實體對象后,這個對象處于瞬時態(tài),即這個對象只是一個保存臨時數(shù)據(jù)的內存區(qū)域,如果沒有變量引用這個對象,則會被JVM的垃圾回收機制回收。這個對象所保存的數(shù)據(jù)與數(shù)據(jù)庫沒有任何關系,除非通過Session的save()、saveOrUpdate()、persist()、merge()方法把瞬時態(tài)對象與數(shù)據(jù)庫關聯(lián),并把數(shù)據(jù)插入或者更新到數(shù)據(jù)庫,這個對象才轉換為持久態(tài)對象。持久態(tài):持久態(tài)對象的實例在數(shù)據(jù)庫中有對應的記錄,并擁有一個持久化標識(ID)。對持久態(tài)對象進行delete操作后,數(shù)據(jù)庫中對應的記錄將被刪除,那么持久態(tài)對象與數(shù)據(jù)庫記錄不再存在對應關系,持久態(tài)對象變成移除態(tài)(可以視為瞬時態(tài))。持久態(tài)對象被修改變更后,不會馬上同步到數(shù)據(jù)庫,直到數(shù)據(jù)庫事務提交。游離態(tài):當Session進行了close()、clear()、evict()或flush()后,實體對象從持久態(tài)變成游離態(tài),對象雖然擁有持久和與數(shù)據(jù)庫對應記錄一致的標識值,但是因為對象已經(jīng)從會話中清除掉,對象不在持久化管理之內,所以處于游離態(tài)(也叫脫管態(tài))。游離態(tài)的對象與臨時狀態(tài)對象是十分相似的,只是它還含有持久化標識。
總結
以上就是本文關于淺談Java實體對象的三種狀態(tài)以及轉換關系的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:java并發(fā)學習之BlockingQueue實現(xiàn)生產(chǎn)者消費者詳解、淺談java中字符串數(shù)組、字符串、整形之間的轉換、java實現(xiàn)遍歷樹形菜單兩種實現(xiàn)代碼分享等,有什么問題可以隨時留言,小編會及時回復大家的。感謝朋友們對本站的支持!
相關文章
java對象與json對象之間互相轉換實現(xiàn)方法示例
這篇文章主要介紹了java對象與json對象之間互相轉換實現(xiàn)方法,結合實例形式分析了java對象與json對象相互轉換實現(xiàn)步驟與相關操作技巧,需要的朋友可以參考下2017-10-10
Java數(shù)據(jù)結構之HashMap和HashSet
這篇文章主要介紹了HashMap和HashSet,什么是哈希表以及HashMap的部分源碼解讀,想了解更多的小伙伴,可以參考閱讀本文2023-03-03
一篇文章帶你使用SpringBoot基于WebSocket的在線群聊實現(xiàn)
這篇文章主要介紹了一篇文章帶你使用SpringBoot基于WebSocket的在線群聊實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10
Idea2023創(chuàng)建springboot不能選擇java8的解決方法(最新推薦)
在idea2023版本創(chuàng)建springboot的過程中,選擇java版本時發(fā)現(xiàn)沒有java8版本,只有java17和java20,遇到這樣的問題如何解決呢,下面小編給大家分享Idea2023創(chuàng)建springboot不能選擇java8的解決方法,感興趣的朋友一起看看吧2024-01-01

