Hibernate重附(Reattach)和合并(Merge)操作的比较

转载 2011年10月18日 21:58:28
 

转载出处: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开发框架

Hibernate是使用最多的ORMapping设计框架,在本课程之中将为读者完全的讲解Hibernate框架的原理以及各个实体组件的使用。官方QQ群:612148723。
  • 2017年01月02日 10:14

Hibernate中的merge方法详解

如果merge的对象在数据库中不存在,merge将会进行save操作,作用等同于updateOrSave();而update因为找不多对象而报错。 如果merge的对象能在数据库中操作,merge操作...
  • csujiangyu
  • csujiangyu
  • 2015-09-05 11:03:17
  • 697

Hibernate中的session.merge()使用

merge的作用是:新new一个对象,如果该对象设置了ID,则这个对象就当作游离态处理: 当ID在数据库中不能找到时,用update的话肯定会报异常,然而用merge的话,就会insert。 当ID在...
  • H12KJGJ
  • H12KJGJ
  • 2016-10-09 16:33:32
  • 1664

Hibernate merge与update区别

merge与update区别 注:就因为这2个方法的区别还得我花了太多时间项目迟迟不能做完     ,但是让我解决了,学到了东西了. 这是一段代码 public void up...
  • z69183787
  • z69183787
  • 2014-06-13 11:31:28
  • 1890

Hibernate 中的 merge方法何解?

文章一: 一直很纳闷这个merge和persist方法,平时也很少用。今天研究下总结下     一、merge  翻译:合并;融合             其实merge方...
  • luckarecs
  • luckarecs
  • 2012-07-26 11:14:07
  • 9271

增量合并操作Delta Merge Operation之触发

触发合并操作有如下几种 Ø  自动触发Auto Merge 系统进程mergedog不时检查本地已加载的列存储表,基于配置条件(如增量存储区大小、可用内存、上次合并过去多久等)决定是否进行增量合并...
  • liyi199488
  • liyi199488
  • 2013-08-06 11:19:48
  • 1188

增量合并操作Delta Merge Operation之过程

由于写操作只在增量存储区上进行,要将数据转换成使用内存少和读取性能好的格式就需要将它传输到主存储区。此过程即为增量合并操作Delta Merge Operation。合并过程如下图 1.  ...
  • liyi199488
  • liyi199488
  • 2013-08-06 10:55:16
  • 1245

sphinx学习笔记之四,合并索引

合并虽然比重建索引要快。但是合并时仍要把两个索引里的文档重新读一遍,所耗用的IO将是索引文件大小的2倍,如100GB + 1GB,将用202GB的IO开销。 indexer --merge DSTI...
  • qiudakun
  • qiudakun
  • 2011-03-01 15:05:00
  • 2946

Git中的merge命令实现和工作方式

想象一下有如下情形:代码库中存在两个分支,并且每个分支都进行了修改,最后你想要将其中的一个分支合并到其他的分支中。 那么要问合并的处理过程是怎么样的呢?Git是对每个分支,依据分支的历史数据按照序列...
  • jxusthusiwen
  • jxusthusiwen
  • 2014-09-17 22:38:50
  • 24409
收藏助手
不良信息举报
您举报文章:Hibernate重附(Reattach)和合并(Merge)操作的比较
举报原因:
原因补充:

(最多只允许输入30个字)