hibernate 持久化對象的生命週期

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   strong   

包括三種狀態:瞬態(自由態),持久態,託管態(游離態)

自由態

持久化對象的自由態,指的是對象在記憶體中存在,但是在資料庫中並沒有資料與其關聯。

持久態

持久態指的是持久化對象處於由Hibernate管理的狀態,這種狀態下持久化對象的變化將會被同步到資料庫中。

游離態

處於持久態的對象,在其對應的Session執行個體關閉後,此時對象進入游離態。也就是說Session執行個體是持久態對象的宿主環境,一旦宿主環境失效,那麼持久態對象迚入游離狀態。

 

session.beginTransaction(); User user = new User(); // 自由態user.setUserName("James"); user.setUserPwd("123"); System.out.println(user.getId()); //id不存在Integer id = (Integer) session.save(user); //返回對應資料庫中的iduser.setUserPwd("456"); session.getTransaction().commit(); // 持久態 → 游離態System.out.println(user.getId()); // id存在 Session session2 = HibernateUtil.getSessionFactory().getCurrentSsession2.beginTransaction(); user.setUserPwd("789"); session2.update(user); // 游離態 → 持久態session2.getTransaction().commit();

游離態和自由態區別

1. 區別就在於游離態對象可以再次與Session迚行關聯而成為持久態對
象。

2. 自由態對象在資料庫中沒有資料與其對應,但是游離態對象在資料庫
中有資料與其對應,只不過當前對象不在Session環境中而已。從對
象的是否有主索引值可以做簡單的判斷。

            三種狀態的改變

load和get方法

• get和load方法都是利用對象的主索引值擷取相應的對象,並可以使對象處於持久狀態。

• load方法擷取對象時不會立即執行查詢操作,而是在第一次使用對象是再去執行查詢操作。如果查詢的對象在資料庫中不存在,load方法傳回值不會為null,在第一次使用時拋出org.hibernate.ObjectNotFoundException異常。

• 使用get方法擷取對象時會立即執行查詢操作,並且對象在資料庫中不存在時返回null值。

save和persist方法

• save和persist方法都是將持久化對象儲存到資料庫中
• sava方法成功執行後,返回持久化對象的ID
• persist方法成功執行後,不會返回持久化對象的ID,persist方法是JPA中推薦使用的方法

save和update方法

• save方法是將自由態的對象進行儲存。
• update方法是將游離態的對象進行儲存。

update和saveOrUpdate方法

• 如果一個對象是游離態或持久態,對其執行update方法後會將對象的修改同步到資料庫中,如果該對象是自由態,則執行update方法是沒有作用的。

• 在執行saveOrUpdate方法時該方法會自動判斷對象的狀態,如果為自由態則執行save操作,如果為游離態或持久態則執行update操作。

update和merge方法

• 如果持久化對象在資料庫中存在,使用merge操作時迚行同步操作。如果對象在資料庫不存在,merge對象則迚行儲存操作。

• 如果對象是游離狀態,經過update操作後,對象轉換為持久態。但是經過merge操作後,對象狀態依然是游離態。

saveOrUpdate和merge方法

saveOrUpdate方法和merge方法的區別在於如果session中存在兩個主索引值相同的對象,進行saveOrUpdate操作時會有異常拋出。這時必須使用merge迚行操作。

clear方法和flush方法

clear方法是將Session中對象全部清除,當前在Session中的對象由持久態轉換為游離態。flush方法則是將持久態對象的更改同步到資料庫中。(在事務提交之前進行flush操作)

聯繫我們

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