現在的位置: 首頁 > 編程語言 > 正文

Hibernate中的merge怎麼使用

2020年06月04日 編程語言 ⁄ 共 1756字 ⁄ 字型大小 評論關閉

  merge的作用是:新new一個對象,如果該對象設置了ID,則這個對象就當作遊離態處理:當ID在資料庫中不能找到時,用update的話肯定會報異常,然而用merge的話,就會insert。下面學步園小編來講解下Hibernate中的merge怎麼使用?

  Hibernate中的merge怎麼使用

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

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

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

   Sessionsession1=HibernateUtils.getSession();   Transactiontransaction1=session1.beginTransaction();   Studentsstr1=newStudents();   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的話,它會把第一個的對象數據賦值給已經處於持久化的那個對象中,自己本身不得變為持久態;

  Hibernate中的merge怎麼使用

   Sessionsession1=HibernateUtils.getSession();   Transactiontransaction1=session1.beginTransaction();   Studentsstr1=(Students)session1.get(Students.class,2);   transaction1.commit();   session1.clear();   session1.close();   Sessionsession2=HibernateUtils.getSession();   Transactiontransaction2=session2.beginTransaction();   Studentsstr2=(Students)session2.get(Students.class,2);   session2.merge(str1);   transaction2.commit();   session2.clear();   session2.close();   Sessionsession2=HibernateUtils.getSession();   Transactiontransaction2=session2.beginTransaction();   Studentsstr2=(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怎麼使用」的內容,希望對大家有用。更多資訊請關注學步園。學步園,您學習IT技術的優質平台!

抱歉!評論已關閉.