当前位置:   article > 正文

session.merge ()方法_cursession.merge

cursession.merge

session.merge ()方法


该方法将修改表中记录,其所需要的实体状态为脱管状态,但是注意,它并不影响调用方法前后的状态,也即该实体依然是脱管状,见例6.4。

例6.4:session.merge ()方法对状态的变化

  1. public void run() {
  2. //创建UserInfo实例
  3. UserInfo userInfo = new UserInfo();
  4. //使之成为脱管状态
  5. userInfo.setId(11112);
  6. userInfo.setName("RW3");
  7. userInfo.setSex("M");
  8. //创建UserInfo实例
  9. UserInfo userInfo2 = new UserInfo();
  10. //使之成为脱管状态
  11. userInfo2.setId(11112);
  12. userInfo2.setName("RW4");
  13. userInfo2.setSex("F");
  14. //启动Session
  15. Session session = HibernateSessionFactory.currentSession();
  16. //启动事务
  17. Transaction tx = session.beginTransaction();
  18. //调用merge方法,此时UserInfo实体状态并没有被持久化
  19. session.merge(userInfo);
  20. //调用merge方法,此时UserInfo实体状态并没有被持久化
  21. //但是数据库中的记录被更新了
  22. ①session.merge(userInfo2);
  23. //merge方法与update方法的差别在于针对同样的操作update方法会报错
  24. //原因在于update方法使得实体状态成为了持久化状态,而Session中不允许两个持久化实体有同样的持久化标识
  25. //session.update(userInfo);
  26. //session.update(userInfo2);
  27. //以下两句不会发送SQL,因为userInfo2不是持久化状态的实体
  28. ③userInfo2.setName("RW5");
  29. userInfo2.setSex("M");
  30. //提交事务
  31. tx.commit();
  32. //关闭Hibernate Session
  33. HibernateSessionFactory.closeSession();
  34. }

针对该段代码将执行如下SQL语句:

Hibernate:

  1. /* ①session.merge(userInfo2)的动作 */
  2. select
  3. userinfo0_.id as id0_0_,
  4. userinfo0_.NAME as NAME0_0_,
  5. userinfo0_.SEX as SEX0_0_,
  6. userinfo0_.roomid as roomid0_0_
  7. from
  8. userinfo userinfo0_
  9. where
  10. userinfo0_.id=?
  11. Hibernate:
  12. /* ①session.merge(userInfo2)的动作 */
  13. update
  14. userinfo
  15. set
  16. NAME=?,
  17. SEX=?,
  18. roomid=?
  19. where
  20. id=?

session.merge()方法会首先发送一句select语句,去数据库端获取UserInfo持久化标识所对应的表记录;然后自动生成一个持久化状态的UserInfo实体,与脱管状态的UserInfo实体做比较是否有所改变;一旦发生了改变,才会发送update语句执行更新。而按执行顺序,若两句session.merge()方法针对同一个脱管状态的UserInfo实体,那其结果只会执行最后一个session.merge()方法所发出的update语句。即使执行了session.merge()方法,UserInfo实体依然是脱管状态,因此③userInfo2. setName("RW5")的语句不会同步数据库中的表。


转自:点击打开链接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/521901
推荐阅读
相关标签
  

闽ICP备14008679号