Hibernate中的merge使用詳情解說

來源:互聯網
上載者:User

標籤:

merge的作用是:新new一個對象,如果該對象設定了ID,則這個對象就當作游離態處理:

                                      當ID在資料庫中不能找到時,用update的話肯定會報異常,然而用merge的話,就會insert。

                                      當ID在資料庫中能找到的時候,update與merge的執行效果都是更新資料,發出update語句;

                              如果沒有設定ID的話,則這個對象就當作瞬態處理:

                               用update的話,由於沒有ID,所以會報異常,merge此時則會儲存資料,根據ID生產策略產生一條資料;

Session session1 = HibernateUtils.getSession();
Transaction transaction1 = session1.beginTransaction();
Students str1 = new Students();
str1.setStu_id(4);
str1.setName("222");
session1.merge(str1);
str1.setName("333");
transaction1.commit();
session1.clear();
session1.close();

下面是當對象在第一個session關閉後,處於游離狀態,

第二個session開啟,又get或load一樣的ID的資料出來時,在第二個session中update那個游離態對象,

          update肯定會出錯,原因是程式會報持久層中已經有該對象,

因為第二個session重新從資料庫中擷取了一個對象成持久態,你的update會讓那個游離態對象也變成持久態,

兩個持久態會衝突撒,然而用merge的話,它會把第一個的對象資料賦值給已經處於持久化的那個對象中,自己本身不得變為持久態;

Session session1 = HibernateUtils.getSession();

Transaction transaction1 = session1.beginTransaction();
Students str1 = (Students)session1.get(Students.class, 2);

transaction1.commit();

session1.clear();

session1.close();
Session session2 = HibernateUtils.getSession();

Transaction transaction2 = session2.beginTransaction();

Students str2 = (Students)session2.get(Students.class, 2);

session2.merge(str1);

transaction2.commit();

session2.clear();

session2.close();

 

Session session2 = HibernateUtils.getSession();

Transaction transaction2 = session2.beginTransaction();

Students str2 = (Students)session2.get(Students.class, 2);

str1.setName("wer");

session2.merge(str1);

System.out.println(str2.getName());  

//這裡改變了,說明持久態的資料也會改變

str2.setName("ee");

System.out.println(str1.getName());  

//這裡不會改變,說明第一個游離態的資料沒有被持久化撒;

transaction2.commit();

session2.clear();

session2.close();

Hibernate中的merge使用詳情解說

相關文章

聯繫我們

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