持久化層的Java對象可處於哪些狀態?這些狀態有哪些特徵?

來源:互聯網
上載者:User

當應用程式通過new語句建立了一個對象,這個對象的生命週期就開始了,當不再有任何引用變數引用它,這個對象就結束生命週期,它佔用的記憶體就可以被JVM的記憶體回收行程回收。對於需要被持久化的Java對象,在它的生命週期中,可處於以下三個狀態之一:

(1) 臨時狀態(transient):剛剛用new語句建立,還沒有被持久化,不處於Session的緩衝中。處於臨時狀態的Java對象被稱為臨時對象。
(2) 持久化狀態(persistent):已經被持久化,加入到Session的緩衝中。處於持久化狀態的Java對象被稱為持久化對象。
(3) 游離狀態(detached):已經被持久化,但不再處於Session的緩衝中。處於游離狀態的Java對象被稱為游離對象。

圖1為Java對象的完整狀態轉換圖,Session的特定方法觸發Java對象由一個狀態轉換到另一個狀態。從圖1看出,當Java對象處於臨時狀態或游離狀態,只要不被任何變數引用,就會結束生命週期,它佔用的記憶體就可以被JVM的記憶體回收行程回收;當處於持久化狀態,由於Session的緩衝會引用它,因此它始終處於生命週期中。

臨時對象的特徵

臨時對象具有以下特徵:
(1) 不處於Session的緩衝中,也可以說,不被任何一個Session執行個體關聯。
(2) 在資料庫中沒有對應的記錄。

在以下情況下,Java對象進入臨時狀態:
(1) 當通過new語句剛建立了一個Java對象,它處於臨時狀態,此時不和資料庫中的任何記錄對應。
(2) Session的delete()方法能使一個持久化對象或游離對象轉變為臨時對象。對於游離對象,delete()方法從資料庫中刪除與它對應的記錄;對於持久化對象,delete()方法從資料庫中刪除與它對應的記錄,並且把它從Session的緩衝中刪除。

持久化對象的特徵

持久化對象具有以下特徵:
(1) 位於一個Session執行個體的緩衝中,也可以說,持久化對象總是被一個Session執行個體關聯。
(2) 持久化對象和資料庫中的相關記錄對應。
(3) Session在清理緩衝時,會根據持久化對象的屬性變化,來同步更新資料庫。

Session的許多方法都能夠觸發Java對象進入持久化狀態:
(1) Session的save()方法把臨時對象轉變為持久化對象。
(2) Session的load()或get()方法返回的對象總是處於持久化狀態。
(3) Session的find()方法返回的List集合中存放的都是持久化對象。
(4) Session的update()、saveOrUpdate()和lock()方法使游離對象轉變為持久化對象。(nate注:根據hibernate reference的說法當試圖用update更新一個持久化對象時會拋異常)
(5)當一個持久化對象關聯一個臨時對象,在允許級聯儲存的情況下,Session在清理緩衝時會把這個臨時對象也轉變為持久化對象。

游離對象的特徵

游離對象具有以下特徵:
(1) 不再位於Session的緩衝中,也可以說,游離對象不被Session關聯。
(2) 游離對象是由持久化對象轉變過來的,因此在資料庫中可能還存在與它對應的記錄(前提條件是沒有其他程式刪除了這條記錄)。

游離對象與臨時對象的相同之處在於,兩者都不被Session關聯,因此Hibernate不會保證它們的屬性變化與資料庫保持同步。游離對象與臨時對象的區別在於:前者是由持久化對象轉變過來的,因此可能在資料庫中還存在對應的記錄,而後者在資料庫中沒有對應的記錄。

Session的以下方法使持久化對象轉變為游離對象:
(1) 當調用Session的close()方法時,Session的緩衝被清空,緩衝中的所有持久化對象都變為游離對象。如果在應用程式中沒有引用變數引用這些游離對象,它們就會結束生命週期。
(2)Session的evict()方法能夠從緩衝中刪除一個持久化對象,使它變為游離狀態。當Session的緩衝中儲存了大量的持久化對象,會消耗許多記憶體空間,為了提高效能,可以考慮調用evict()方法,從緩衝中刪除一些持久化對象。但是多數情況下不推薦使用evict()方法,而應該通過查詢語言,或者顯式的導航來控制對象圖的深度

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.