偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Hibernate中的merge使用詳情解說(shuō)

開發(fā) 后端
merge的作用是:新new一個(gè)對(duì)象,如果該對(duì)象設(shè)置了ID,則這個(gè)對(duì)象就當(dāng)作游離態(tài)處理,相關(guān)詳細(xì)內(nèi)容,請(qǐng)繼續(xù)往下看

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

當(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開啟,又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.  
  4. Students str1 = (Students)session1.get(Students.class2);  
  5. transaction1.commit();  
  6. session1.clear();  
  7. session1.close();  
  8.  
  9. Session session2 = HibernateUtils.getSession();  
  10. Transaction transaction2 = session2.beginTransaction();  
  11. Students str2 = (Students)session2.get(Students.class2);  
  12. session2.merge(str1);  
  13. transaction2.commit();  
  14. session2.clear();  
  15.  
  16. session2.close();  
  17.  
  18.  
  19. Session session2 = HibernateUtils.getSession();  
  20. Transaction transaction2 = session2.beginTransaction();  
  21. Students str2 = (Students)session2.get(Students.class2);  
  22. str1.setName("wer");  
  23. session2.merge(str1);  
  24. System.out.println(str2.getName());  //這里改變了,說(shuō)明持久態(tài)的數(shù)據(jù)也會(huì)改變  
  25. str2.setName("ee");  
  26. System.out.println(str1.getName());   //這里不會(huì)改變,說(shuō)明第一個(gè)游離態(tài)的數(shù)據(jù)沒(méi)有被持久化撒;  
  27. transaction2.commit();  
  28. session2.clear();  
  29. session2.close(); 

原文鏈接:http://blog.csdn.net/lang_man_xing/article/details/7572964

責(zé)任編輯:林師授 來(lái)源: lang_man_xing的博客
相關(guān)推薦

2009-09-24 13:25:58

Hibernate m

2009-09-23 15:37:52

Hibernate 原

2009-06-26 10:19:00

Clob字段Hibernate

2023-01-05 11:34:46

PandasMerge方法

2022-03-04 09:59:16

logging模塊函數(shù)程序

2009-09-23 13:23:12

Hibernate M

2021-08-16 08:12:04

SQLMerge用法

2011-07-08 10:25:55

JavaScript

2009-06-29 09:00:42

Hibernate的Q

2009-06-17 16:08:58

Hibernate C

2009-06-18 10:07:03

CriteriaHibernate

2009-06-26 16:15:04

Criteria的用法Hibernate

2010-08-26 13:38:45

DHCP冗余

2009-12-31 13:56:57

ADO訪問(wèn)接口

2009-06-26 10:32:00

QBC查詢Hibernate

2009-06-01 11:51:37

hibernate緩存機(jī)制開發(fā)者

2009-09-22 15:26:30

Hibernate多表

2009-06-29 08:59:05

hbm的generat

2009-06-17 14:17:40

Criteria條件查Hibernate

2009-09-28 13:43:28

使用Hibernate
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)