精通Hibernate——Hibernate中Java對象的狀態詳解

來源:互聯網
上載者:User

標籤:hibernate   對象   狀態   

Hibernate中對於要持久化的Java對象在他的生命週期中需要經曆以下幾種狀態:
1、臨時狀態(transient):剛剛用new語句建立,還沒有被持久化,不處於session的緩衝中。處於臨時狀態的Java對象被稱為臨時對象。
2、持久化狀態(persistent):已經被持久化,加入到session中,處於持久化的狀態Java對象被稱為持久化對象。
3、游離狀態(detached):已經被持久化,但不處於session中。
下面看一下Customer對象狀態轉換過程

臨時對象的特徵
1、不處於session的緩衝中,不被任何一個session執行個體關聯
2、在資料庫中沒有對應的記錄
在以下情況對象會進入臨時對象狀態
1、當通過new語句剛建立的對象
2、session的delete方法能使一個持久化對象或游離對象轉換為臨時對象。對於游離對象,delete方法從資料庫中刪除與他對應的記錄;對於持久化對象,delete方法從資料庫中刪除與他對應的記錄,對於持久化對象,delete方法從資料庫中刪除與他對應的記錄並且把它從session中刪除。
持久化對象的特徵
1、位於一個session執行個體的緩衝中,持久化對象總是被一個session執行個體關聯
2、持久化對象和資料庫中的記錄對應
3、session在清理緩衝時,會根據持久化對象的屬性變化,來同步更新資料庫,session的許多方法都能夠觸發Java對象進入持久化狀態
4、session的save方法把臨時對象轉換為持久化對象
5、session的load或get方法返回的對象總是處於持久化狀態
6、session的find方法返回的List集合中存放的都是持久化對象
7、session的update、saveOrUpdate、lock方法使游離對象轉變為持久化對象
8、當一個持久化對象關聯一個臨時對象,在允許級聯儲存的情況下,session在清理緩衝時會把這個臨時對象也轉換為持久化對象。
Hibernate保證在同一個session執行個體的緩衝中,資料表中的每條記錄只對應唯一的持久化對象。如下:

Session session1 = sessionFactory.openSession();Session session2 = sessionFactory.openSession();Transaction tx1 = session1.beginTransaction();Transaction tx2 = session2.beginTransaction();Customer a = (Customer)session1.load(Customer.class,new Long(1));Customer b = (Customer)session1.load(Customer.class,new Long(1));Customer c = (Customer)session2.load(Customer.class,new Long(1));System.out.println(a == b);// trueSystem.out.println(a == c);// fals

游離對象的特徵
1、不再位於session緩衝中,不被session關聯
2、游離對象是由持久化對象轉變而來,因此在資料庫中可能還存在與他對應的記錄
session的以下方法會使持久化對象轉變為游離狀態
1、當調用session的close方法,session的緩衝被清空
2、session的evict方法能夠從緩衝中刪除一個持久化對象,使他變為游離狀態。當session緩衝中儲存了大量的持久化對象,會消耗許多記憶體空間,為了提高效能,可以考慮到調用evict方法,從緩衝中刪除一些持久化對象。但是,大多數情況不推薦使用,而是通過查詢語言或者顯式的導航來控制對象圖的深度。

精通Hibernate——Hibernate中Java對象的狀態詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.