??????最近正在研讀《深入淺出Hibernate》一書,前面寫的隨筆有些也是讀該書的筆記,只是未做歸類,從這篇開始,我將把相關(guān)的內(nèi)容都整理成一個系列的讀書筆記。
??????今天這篇是有關(guān)實體對象的生命周期。我剛開始接觸Hibernate的時候,只是簡單的把它當(dāng)做一個API工具,直到后來看到有關(guān)VO和PO的內(nèi)容時,才意識到Hibernate不僅僅是一個O/R Mapping的API工具,它還是一個容器。它可以幫你管理實體對象的生命周期。
??????實體對象的生命周期有三種狀態(tài):
??????1.Transient(自由狀態(tài))
??????此時的實體對象和數(shù)據(jù)庫中的記錄無關(guān)聯(lián),只是一個普通的JavaBean。
??????2.Persistent(持久狀態(tài))
??????此時的實體對象和數(shù)據(jù)庫中的記錄有關(guān)聯(lián),其變更將由Hibernate固化到數(shù)據(jù)庫中。該實體對象處于由Hibernate框架所管理的狀態(tài)。
??????3.Detached(游離狀態(tài))
??????處于Persistent狀態(tài)的對象,其對應(yīng)的Session實例關(guān)閉之后,那么,此對象就處于"Detached"狀態(tài)。Detached狀態(tài)和Transient狀態(tài)的區(qū)別在于Detached狀態(tài)的對象可以再次與某個Session實例相關(guān)聯(lián)而成為Persistent對象。
??????從實體對象是否被納入Hibernate實體管理容器的角度,Transient和Detached狀態(tài)的實體對象可以統(tǒng)稱為VO(Value Object),而被管理的實體對象稱為PO(Persistent Object)。兩者的區(qū)別:
??????1.VO是相對獨立的實體對象,處于非管理狀態(tài)。
??????2.PO是Hibernate納入其實體管理容器(Entity Map)的對象,它代表了與數(shù)據(jù)庫中某條記錄對應(yīng)的Hibernate實體,PO的變化在事務(wù)提交時將反映到實際數(shù)據(jù)庫中。
??????3.如果一個PO與其對應(yīng)的Session實例分離,那么此時,它又會變成一個VO。
??????下圖是我畫的實體對象生命周期的狀態(tài)轉(zhuǎn)換圖:
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
