Hibernate中update()和merge()的区别

来源:互联网 发布:文明5ige编辑器 Linux 编辑:程序博客网 时间:2024/06/05 15:49

今天练习项目时遇到到这个问题,查了下资料特此汇总下

下面的这些参资料,简单明了,感谢!

1、初学hibernate时,对于session中的update()和merge()两个方法,很容易搞混,觉得两种都能用,有时候,又觉得不知道该用哪一种。
实际上,这两个方法,是有很大区别的
首先,对于一个处于detatch状态的实体对象来说,要将其中的修改,合并到数据库中,有两种方法,一种方式,是调用update(),另一种方式是调用merge()
当调用update()时,首先要取保目标session中,不包含同样id的实体对象的引用,如果有的话,会抛出异常,完成update()方法后,这个实体对象从detatch状态,转换为persistent状态,在session提交前,后续对其的修改,都会被合并到数据库中。
当调用merge()对象时,无需考虑session中是否已经包含同样id的实体对象,如果session中没有同样id的实体对象,hibernate会通过select语句,从数据库中查询出对应对象,如果数据库中没有对应对象,就新建一个。同时,完成merge()操作后,会返回数据库中对应的persistent状态对象,而原有的,作为参数传入的实体对象,仍然是detatch状态,后续代码对其的修改,无法合并到数据库中。
点击参阅原址
2、利用Merge代替复杂的UPDATE语句

3、merge与update区别—->你一定要看!

0 0
原创粉丝点击