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