實體對象的生命周期有三種狀態:
1.
Transient(自由狀態)
此時的實體對象和數據庫中的記錄無關聯,只是一個普通的JavaBean。
2.
Persistent(持久狀態)
此時的實體對象和數據庫中的記錄有關聯,其變更將由Hibernate固化到數據庫中。該實體對象處于由Hibernate框架所管理的狀態。
3.Detached(游離狀態)
處于Persistent狀態的對象,其對應的Session實例關閉之后,那么,此對象就處于"Detached"狀態。Detached狀態和Transient狀態的區別在于Detached狀態的對象可以再次與某個Session實例相關聯而成為Persistent對象。
從實體對象是否被納入Hibernate實體管理容器的角度,Transient和Detached狀態的實體對象可以統稱為VO(Value Object),而被管理的實體對象稱為PO(Persistent Object)。兩者的區別:
1.VO是相對獨立的實體對象,處于非管理狀態。
2.PO是Hibernate納入其實體管理容器(Entity Map)的對象,它代表了與數據庫中某條記錄對應的Hibernate實體,PO的變化在事務提交時將反映到實際數據庫中。
3.如果一個PO與其對應的Session實例分離,那么此時,它又會變成一個VO。
下圖是我畫的實體對象生命周期的狀態轉換圖: