Hibernate重附(Reattach)和合并(Merge)操作的比较
来源:互联网 发布:2016淘宝会查的很严吗 编辑:程序博客网 时间:2024/06/17 13:04
转载出处:http://xmuzyq.iteye.com/blog/256691
Hibernate中将对象从托管状态转变为持久化状态可以采用两种方法:重附(Reattach)和合并(Merge)。下面分别总结一下:
第一种:重附
重附操作使得一个托管对象重新受到persistence context的管理,具体可以采用两种方法:
1 update方法,此方将实体对象从托管状态转变为持久化状态,但是需要注意的是如果当前的持久化上下文(persistence context)中已经存在了一个和托管对象有相同标识符的持久化对象就会抛出NonUniqueException,因为在持久化上下文中,对数据库表中的每一条记录来说,都只能有一个对象与其对应,这样方便持久化对象的脏检测。此方法强制一个update语句,进行持久化对象与数据库的同步。
2 lock方法。lock方法也用与将一个托管对象状态转化为持久化,但是此方法的限制是在确保对象没有被修改的情况下,如果在调用方法之前,修改了对象,那么当事务提交的时候,修改是不会被传播到数据库里的。
第2种:合并
所谓合并就是将托管对象的状态复制到持久化对象里,然后生产一个新的持久化对象。并且合并还有一个作用就是可以将一个transient状态的对象变为persistent状态。在合并操作里,有两种情况:
1 如果当前的持久化上下文种没有与托管对象相同标识符的对象,那么Hibernate隐式的调用select来查询,如果数据库种有记录,那么就将托管对象的状态与新查询到的对象进行合并,如果数据库没有对应的记录,那么就新建一个持久化对象,然后将托管对象的状态复制到持久化对象里。
2 如果持久化上下文种有与托管对象相同标识符的对象,那么就将托管对象的状态复制到持久化对象里。(合并中需要注意的是原来托管的对象还是托管的,只不过merge返回的是一个新的持久化对象。)
需要注意的是JPA里只支持合并,不支持重附。
- Hibernate重附(Reattach)和合并(Merge)操作的比较
- Git 集成 Araxis Merge 作为比较和合并GUI工具的配置
- Eclipse 集成 Araxis Merge 作为比较和合并GUI工具的配置
- Vimdiff---VIM的比较和合并工具
- Vimdiff---VIM的比较和合并工具
- Vimdiff---VIM的比较和合并工具
- svn代码回滚和合并的利器svn merge
- 快速比较和合并文件
- 用javascript比较快速排序和合并排序的优劣
- 构串操作符#和合并操作符##的用法
- java流操作对文件的分割和合并
- 【环境配置记录】Ubuntu 1604 安装 SVN ,以及 SVN 的 分支(branch)和合并(merge)
- opencv之split和merge分离通道和合并多通道的用法
- 快速排序和合并排序的比较(时间和比较步数)
- 文件的分割和合并
- 矩阵的分块和合并
- 文件的分割和合并
- 文件的切割和合并
- Meego针对Nokia N900/N950/N9社区版发布
- Servlet的细节
- vc++学习精髓(收集,整理)
- 三角形ABC的顶点坐标,判断三角形ABC是否直角三角形
- How to remove OLAP组件?
- Hibernate重附(Reattach)和合并(Merge)操作的比较
- 题目:[NOIP2001]求先序排列
- ubuntu更改物理地址
- 如何在其它程序窗口(已知窗口的句柄)加上一个按钮
- Concurrency Setting in Csharp
- MediaProvider源码分析
- 【操作系统】程序运行时的内存组织结构
- 关于对TrerSet的理解
- Java heap space