孫衛琴的《精通JPA與Hibernate》的讀書筆記:持久化層對象的四種狀態

在這裏插入圖片描述

站在持久化層的角度,一個Java對象在它的生命週期中,可處於如下四個狀態之一:
(1) 臨時狀態(transient):剛用new語句建立,尚未被持久化,而且不處於持久化緩存中。處於臨時狀態的Java對象被稱爲臨時對象。
(2) 持久化狀態(persistent):已經被持久化,而且加入到持久化緩存中。處於持久化狀態的Java對象被稱爲持久化對象。
(3) 刪除狀態(removed):再也不處於持久化緩存中,而且Session已經計劃將其從數據庫中刪除。處於刪除狀態的Java對象被稱爲被刪除對象。
(4) 遊離狀態(detached):已經被持久化,但再也不處於持久化緩存中。處於遊離狀態的Java對象被稱爲遊離對象。java

持久化類與持久化對象是不一樣的概念。持久化類的實例能夠處於臨時狀態、持久化狀態、刪除狀態和遊離狀態,其中處於持久化狀態的實例被稱爲持久化對象。

下圖爲Java對象的完整狀態轉換圖,EntityManager以及javax.persistence.Query的特定方法使Java對象由一個狀態轉換到另外一個狀態。從該圖看出,當Java對象處於臨時狀態、刪除狀態或遊離狀態,只要不被任何變量引用,就會結束生命週期,它佔用的內存就能夠被JVM的垃圾回收器回收;當處於持久化狀態,因爲持久化緩存會引用它,所以它始終處於生命週期中。數據庫

在這裏插入圖片描述

相關文章
相關標籤/搜索