作者:狂放不羁
网址:http://yuquan.blog.51cto.com

>>>转载请注明出处!<<<
Hibernate中将对象从托管状态转变为持久化状态可以采用两种方法:重附(Reattach)和合并(Merge)。下面分别总结一下:
第一种:重附
重附操作使得一个托管对象重新受到persistence context的管理,具体可以采用两种方法:
1 update方法,此方将实体对象从托管状态转变为持久化状态,但是需要注意的是如果当前的持久化上下文(persistence context)中已经存在了一个和托管对象有相同标识符的持久化对象就会抛出NonUniqueException,因为在持久化上下文中,对数据库表中的每一条记录来说,都只能有一个对象与其对应,这样方便持久化对象的脏检测。此方法强制一个update语句,进行持久化对象与数据库的同步。
2 lock方法。lock方法也用与将一个托管对象状态转化为持久化,但是此方法的限制是在确保对象没有被修改的情况下,如果在调用方法之前,修改了对象,那么当事务提交的时候,修改是不会被传播到数据库里的。
第2种:合并
所谓合并就是将托管对象的状态复制到持久化对象里,然后生产一个新的持久化对象。并且合并还有一个作用就是可以将一个transient状态的对象变为persistent状态。在合并操作里,有两种情况:
1 如果当前的持久化上下文种没有与托管对象相同标识符的对象,那么Hibernate隐式的调用select来查询,如果数据库种有记录,那么就将托管对象的状态与新查询到的对象进行合并,如果数据库没有对应的记录,那么就新建一个持久化对象,然后将托管对象的状态复制到持久化对象里。
2 如果持久化上下文种有与托管对象相同标识符的对象,那么就将托管对象的状态复制到持久化对象里。(合并中需要注意的是原来托管的对象还是托管的,只不过merge返回的是一个新的持久化对象。)

需要注意的是JPA里只支持合并,不支持重附。 <script type="text/javascript"></script>

转载于:https://blog.51cto.com/yuquan/360699

Hibernate重附(Reattach)和合并(Merge)操作的比较相关推荐

  1. Reattach和Merge操作的比较

    Hibernate中将对象从托管状态转变为持久化状态可以采用两种方法:重附(Reattach)和合并(Merge).下面分别总结一下: [b]第一种:重附[/b] 重附操作使得一个托管对象重新受到pe ...

  2. RxJava2 / RxAndroid2的merge操作合并多个Observable

    RxJava2/RxAndroid2的merge操作合并多个Observable RxAndroid2/RxJava2的merge操作合并若干个Observable为单个可观测的Observable, ...

  3. dataframe常用操作_Pandas | Dataframe的merge操作,像数据库一样尽情join

    点击上方蓝字,关注并星标,和我一起学技术. 今天是pandas数据处理第8篇文章,我们一起来聊聊dataframe的合并. 常见的数据合并操作主要有两种,第一种是我们新生成了新的特征,想要把它和旧的特 ...

  4. pandas之DataFrame合并merge

    一.merge merge操作实现两个DataFrame之间的合并,类似于sql两个表之间的关联查询.merge的使用方法及参数解释如下: pd.merge(left, right, on=None, ...

  5. python dataframe合并相同行_pandas之DataFrame合并merge

    一.merge merge操作实现两个DataFrame之间的合并,类似于sql两个表之间的关联查询.merge的使用方法及参数解释如下: pd.merge(left, right, on=None, ...

  6. 华为手环B2鸿蒙,【华为手环B2】运动全能冠军(附《GIF版手势操作秘籍》)

    本帖最后由 天上七星 于 2015-5-24 09:51 编辑 [华为手环B2]运动全能冠军(附<GIF版手势操作秘籍>) 为了将手环的运动功能完全体验出来,七星我可没少下功夫.最明显的一 ...

  7. IDEA 关于两个分支代码合并的操作

    第一步 首先切换到master分支,在要合并的分支上右键 Merge into current,合并成功后,再选择Push 如果代码冲突需要解决冲突 accept yours:代表以自己的为准 acc ...

  8. git只合并merge部分代码的方法

    场景 在master分支外,小明独立开发一个功能f1分支.f1中代码量较大且仍在更改,小明希望只将一部分文件合并到master.其他代码在以后分批次合并.在合并和开发过程中,master和f1都会不断 ...

  9. Git如何撤销merge操作

    Git如何撤销merge操作.当 merge 以后还有别的操作和改动时,用 git revert:该命令就是为撤销某次提交而存在的: 首先,我是明白100047dcc这次提交是有问题的,这是问题的源头 ...

  10. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)

    今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...

最新文章

  1. Android监听程序自身被卸载
  2. 简易linux修改ip,让Linux修改IP、DNS等可以更简单
  3. 7-1 抓老鼠啊~亏了还是赚了? (20 分)
  4. iBatis.Net异步多线程 操作Ibatis报错
  5. python斐波那契前20递归_算法python实现经典递归问题(汉诺塔, 斐波那契数列,阶乘)...
  6. 别把数学想得太难,数学是一场游戏
  7. 多线程下不能用truncate吗_那么多的化妆品,怀孕后都不能用了吗?
  8. PC端 java 开发蓝牙所遇到的问题
  9. 2017.10.10 狼和羊的故事 思考记录
  10. 期望dp--BZOJ3450 Easy
  11. Python模拟新浪微博登录转载,是我的那篇资料来源
  12. SpringCloud是什么
  13. 配置JDK环境变量(详细图文教程)
  14. Endnote X8激活注册信息
  15. 宏基E5572g 键盘排线插拔 拆机局部
  16. android显示动态图片,android显示gif图
  17. VirtualBox下Android-x86安装与基础配置
  18. sqlserver数据库账户登录18456错误怎么解决?
  19. Vue中禁止鼠标滑轮事件
  20. 鸿蒙的法则之力,鸿蒙之力,恐怖如斯

热门文章

  1. 同一个项目的同一DLL多版本的兼容问题
  2. 利用数据库管理国际化资源配置以及自定义标签实现国际化效果
  3. 戴尔vStart:加快虚拟化,并马上应用戴尔私有云
  4. vim 配置文件 (未完待续)
  5. C语言实现日期转换小工具
  6. 计算机应用基础三次没有通过怎么办,计算机应用基础第三次作业
  7. pg库使用dblink连接mysql_PG-跨库操作-dblink
  8. JSTL表达式的理解和使用
  9. java底层 文件操作,java底层是怎样对文件操作的
  10. 查找两个表中主键一样但其它字段数值不一样的记录