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();
相关推荐
当ID在数据库中不能找到时,用update的话肯定会报异常,然而用merge的话,就会insert。 当ID在数据库中能找到的时候,update与merge的执行效果都是更新数据,发出update语句; 如果没有设置ID的话,则这个对象就当作...
NULL 博文链接:https://dreamzhong.iteye.com/blog/1218885
Hibernate merge、update与saveOrUpdate方法的区别
Araxis Merge 软件入门使用教程 Araxis Merge 软件入门使用教程 Araxis Merge 软件入门使用教程 Araxis Merge 软件入门使用教程 pdf
Araxis Merge 是一个可视化的文件比较、合并和同步的软件,能够方便的被软件工程师和 web 站点开发者使用快速精确地比较、了解和联合不同版本的源文件;进行版本和质量控制,创建 HTML 或是 XML 报告。
Oracle中merge into的使用 很有用的哦 学习一下
Hibernate中session的merge以及update方法
Araxis Merge v6.5:免安装版本,解压直接运行merge.exe即可正常使用(目前好像不支持Win10系统了,但是我同事的win10可以用,看需要使用)。 Araxis Merge 2017:解压后,看安装说明,比较简单,纯净2017,推荐...
android merge 标签使用介绍
Araxis.Merge.Professional.v2012.4162.x64-BEAN_的中文启动包
Android中include和merge标签的基本使用方法
oracle同一个表中使用merge
android中include和merge标记的区别和使用
merge 比较工具 merge 比较工具merge 比较工具
详细介绍了使用 BULK COLLECT 进行批量操作 提高sql的执行效率 使用MERGE INTO USING 一条sql搞定 新增和修改 使用connect by 进行递归树查询
免费Merge比较工具 win Merge
merge在include使用下优化布局文件
Mybatis批量foreach merge into的用法,这是介绍Mybatis批量foreach merge into的用法的文档
做项目的时候通常版本与版本比较,因为下一个版本跟前一个版本差一点,可一般我们做多后查不出来,用WinMerge能很简单的查出来增加了哪里........