国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Hibernate中的merge使用詳情解說

2019-11-09 15:34:12
字體:
供稿:網(wǎng)友

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

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

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

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

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

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();

下面是當(dāng)對(duì)象在第一個(gè)session關(guān)閉后,處于游離狀態(tài),第二個(gè)session開啟,又get或load一樣的ID的數(shù)據(jù)出來時(shí),在第二個(gè)session中update那個(gè)游離態(tài)對(duì)象,

          update肯定會(huì)出錯(cuò),原因是程序會(huì)報(bào)持久層中已經(jīng)有該對(duì)象,因?yàn)榈诙€(gè)session重新從數(shù)據(jù)庫中獲取了一個(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è)我測試很多到的,沒問題)

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 昆山市| 南投市| 霞浦县| 漯河市| 平顶山市| 锦州市| 高密市| 嘉善县| 南雄市| 松滋市| 永顺县| 双辽市| 浑源县| 华池县| 巴塘县| 万山特区| 张家界市| 旅游| 安阳县| 临漳县| 伊川县| 西乌珠穆沁旗| 隆德县| 铁岭市| 瓦房店市| 乌拉特后旗| 泸水县| 阿尔山市| 镇康县| 河池市| 宜黄县| 木兰县| 大足县| 宜都市| 玛纳斯县| 东兴市| 伊宁市| 和顺县| 饶河县| 桦川县| 塔河县|