Hibernate的Session的lock方法和merge方法有什么区别
发布网友
发布时间:2022-04-11 23:47
我来回答
共1个回答
热心网友
时间:2022-04-12 01:16
实际上,这两个方法,是有很大区别的
首先,对于一个处于detatch状态的实体对象来说,要将其中的修改,合并到数据库中,有两种方法,一种方式,是调用update(),另一种方式是调用merge()
当调用update()时,首先要取保目标session中,不包含同样id的实体对象的引用,如果有的话,会抛出异常,完成update()方法后,这个实体对象从detatch状态,转换为persistent状态,在session提交前,后续对其的修改,都会被合并到数据库中。
当调用merge()对象时,无需考虑session中是否已经包含同样id的实体对象,如果session中没有同样id的实体对象,hibernate会通过select语句,从数据库中查询出对应对象,如果数据库中没有对应对象,就新建一个。
同时,完成merge()操作后,会返回数据库中对应的persistent状态对象,而原有的,作为参数传入的实体对象,仍然是detatch状态,后续代码对其的修改,无法合并到数据库中。
-
Hibernate的Session的lock方法和merge方法有什么区别
实际上,这两个方法,是有很大区别的 首先,对于一个处于detatch状态的实体对象来说,要将其中的修改,合并到数据库中,有两种方法,一种方式,是调用update(),另一种方式是调用merge()当调用update()时,首先要取保目标session中,不包含同样id的实体对象的引用,如果有的话,会抛出异常,完成update(...
hibernate lock和update的区别
当用update更新时发生了一个对象不能在两个seesion里的异常时候,就可以用lock方法锁掉一个,可以解决错误。她们没有什么类似点和区别。跟merge有区别,而且merge有lock的作用。
Jpa中的persist方法和merge方法有哪些区别,帮我举一个例子解释下?_百 ...
1、含义不同 persist是保存,跟save方法一样,更接近持久化的含义;而merge是合并的意思,就是当保存的实体,根据主键id划分,如果已存在,那么就是更新操作,如果不存在,就是新增操作。2、用法不同 persist会把传进去的实体放到持久化上下文中,此时如果持久化上下文中有了这个实体,就会抛出javax.persis...
hibernate saveOrUpdate方法和merge的区别
首先 saveOrUpdate返回void 也就是什么都不返回 而merge会返回一个对象 其次 saveOrUpdate的做法是:将对象持久化,如果此时session缓存中存在相同id的对象,则报错;否则如果没有id就保存;有id的话,能找到这个id的对象就修改或者找不到就保存 merge 在执行session.merge(a)代码后,a对象仍然不是持久...
hibernate.merge()方法怎么用
方法原型:public Object merge(Object object)使用merge方法是有如下情况 1、如果session中并不存在于参数object具有相同主见的对象,那么,首先需要根据主键从数据库中加载出该对象,然后将参数object中的属性拷贝到加载出来的那个对象上面,最后返回该持久化对象,同时需要注意,参数object并没有关联到session...
hibernate saveOrUpdate或者merge 方法报错违反唯一性约束
这种错误一般可能是将同一实体类的不同对象进行了操作,就会报违反唯一性约束的错误,然而对于这种错误的另一种解决方案:1、使用session.clear()方法先将session清空 2、再用session.update(Object obj)来进行操作
hibernate的merge和saveOrUpdate方法有什么区别
当我们使用update的时候,执行完成后,我们提供的对象a的状态变成持久化状态。但当我们使用merge的时候,执行完成,我们提供的对象a还是脱管状态,hibernate或者new了一个b,或者检索到 一个持久对象b,并把我们提供的对象a的所有的值拷贝到这个b,执行完成后b是持久状态,而我们提供的a还是托管状态。
在hibernate中java对象有哪些状态
3.Hibernate中get()和load()区别 当使用Session的get()方法时,如果加载的数据不存在,get()方法会返回一个NULL;但是使用load()方法,若加载的数据不存在,则会抛出异常。一.load加载方式 当使用load方法来得到一个对象时,此时hibernate会使用延迟加载的机制来加载这个对象,即:当我们使用session.load...
hibernate的hbm文件<bag>标签的cascade属性值为lock,是什么含义?
cascade="save-update,lock"当你对User对象做保存、更新以及加锁时,同时会对bag中的Bid对象进行保存、更新以及加锁。
如何提高hibernate性能
你也可以通过merge() 或lock() 方法,在访问未实例化的集合(或代理)之前, 为先前载入的对象绑定一个新的Session 。 显然,Hibernate将不会,也不应该自动完成这些任务,因为这将引入一个特殊的事务语义。 有时候,你并不需要完全实例化整个大的集合,仅需要了解它的部分信息(例如其大小)、或者集合的部分内容。 你...