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

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

新聞中心

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

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

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

當(dāng)ID在數(shù)據(jù)庫(kù)中不能找到時(shí),用update的話肯定會(huì)報(bào)異常,然而用merge的話,就會(huì)insert。

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

如果沒(méi)有設(shè)置ID的話,則這個(gè)對(duì)象就當(dāng)作瞬態(tài)處理:

用update的話,由于沒(méi)有ID,所以會(huì)報(bào)異常,merge此時(shí)則會(huì)保存數(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();

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

 
 
 
  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());  //這里改變了,說(shuō)明持久態(tài)的數(shù)據(jù)也會(huì)改變
  20. str2.setName("ee");
  21. System.out.println(str1.getName());   //這里不會(huì)改變,說(shuō)明第一個(gè)游離態(tài)的數(shù)據(jù)沒(méi)有被持久化撒;
  22. transaction2.commit();
  23. session2.clear();
  24. session2.close();

當(dāng)前標(biāo)題:Hibernate中的merge使用詳情解說(shuō)
本文URL:http://m.5511xx.com/article/djohidj.html