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

首頁 > 學院 > 開發設計 > 正文

Hibernate中的merge使用詳情解說

2019-11-09 16:45:28
字體:
來源:轉載
供稿:網友

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

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

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

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

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

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

下面是當對象在第一個session關閉后,處于游離狀態,第二個session開啟,又get或load一樣的ID的數據出來時,在第二個session中update那個游離態對象,

          update肯定會出錯,原因是程序會報持久層中已經有該對象,因為第二個session重新從數據庫中獲取了一個對象成持久態,你的update會讓那個游離態對象也變成持久態,兩個持久態會沖突撒,然而用merge的話,它會把第一個的對象數據賦值給已經處于持久化的那個對象中,自己本身不得變為持久態;(這個我測試很多到的,沒問題)

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浏阳市| 天气| 万安县| 庄河市| 永丰县| 当雄县| 周口市| 格尔木市| 锡林郭勒盟| 乌兰县| 柯坪县| 大宁县| 曲周县| 澎湖县| 汉沽区| 剑河县| 平阴县| 包头市| 黔西县| 罗源县| 巨鹿县| 吉安市| 剑阁县| 称多县| 青海省| 谷城县| 措美县| 响水县| 突泉县| 洪泽县| 年辖:市辖区| 镇安县| 安康市| 特克斯县| 东乌| 年辖:市辖区| 靖西县| 泉州市| 娱乐| 邵武市| 屏山县|