日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Hibernate中的merge使用詳情解說

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

創(chuàng)新互聯(lián)公司制作網(wǎng)站網(wǎng)頁找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁設計,成都網(wǎng)站建設、做網(wǎng)站,網(wǎng)站設計,企業(yè)網(wǎng)站搭建,網(wǎng)站開發(fā),建網(wǎng)站業(yè)務,680元做網(wǎng)站,已為1000多家服務,創(chuàng)新互聯(lián)公司網(wǎng)站建設將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設、網(wǎng)絡營銷推廣服務!

當ID在數(shù)據(jù)庫中不能找到時,用update的話肯定會報異常,然而用merge的話,就會insert。

當ID在數(shù)據(jù)庫中能找到的時候,update與merge的執(zhí)行效果都是更新數(shù)據(jù),發(fā)出update語句;

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

用update的話,由于沒有ID,所以會報異常,merge此時則會保存數(shù)據(jù),根據(jù)ID生產(chǎn)策略生成一條數(shù)據(jù);

 
 
 
  1. Session session1 = HibernateUtils.getSession();
  2. Transaction transaction1 = session1.beginTransaction();
  3. Students str1 = new Students();
  4. str1.setStu_id(4);
  5. str1.setName("222");
  6. session1.merge(str1);
  7. str1.setName("333");
  8. transaction1.commit();
  9. session1.clear();
  10. session1.close();

下面是當對象在第一個session關(guān)閉后,處于游離狀態(tài),第二個session開啟,又get或load一樣的ID的數(shù)據(jù)出來時,在第二個session中update那個游離態(tài)對象,update肯定會出錯,原因是程序會報持久層中已經(jīng)有該對象,因為第二個session重新從數(shù)據(jù)庫中獲取了一個對象成持久態(tài),你的update會讓那個游離態(tài)對象也變成持久態(tài),兩個持久態(tài)會沖突撒,然而用merge的話,它會把第一個的對象數(shù)據(jù)賦值給已經(jīng)處于持久化的那個對象中,自己本身不得變?yōu)槌志脩B(tài);(這個我測試很多到的,沒問題)

 
 
 
  1. Session session1 = HibernateUtils.getSession();
  2. Transaction transaction1 = session1.beginTransaction();
  3. Students str1 = (Students)session1.get(Students.class, 2);
  4. transaction1.commit();
  5. session1.clear();
  6. session1.close();
  7. Session session2 = HibernateUtils.getSession();
  8. Transaction transaction2 = session2.beginTransaction();
  9. Students str2 = (Students)session2.get(Students.class, 2);
  10. session2.merge(str1);
  11. transaction2.commit();
  12. session2.clear();
  13. session2.close();
  14. Session session2 = HibernateUtils.getSession();
  15. Transaction transaction2 = session2.beginTransaction();
  16. Students str2 = (Students)session2.get(Students.class, 2);
  17. str1.setName("wer");
  18. session2.merge(str1);
  19. System.out.println(str2.getName());  //這里改變了,說明持久態(tài)的數(shù)據(jù)也會改變
  20. str2.setName("ee");
  21. System.out.println(str1.getName());   //這里不會改變,說明第一個游離態(tài)的數(shù)據(jù)沒有被持久化撒;
  22. transaction2.commit();
  23. session2.clear();
  24. session2.close();

當前文章:Hibernate中的merge使用詳情解說
URL鏈接:http://m.5511xx.com/article/djohidj.html