Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 在hibernate中尝试第二次更新记录时出现异常_Spring_Hibernate_Jpa - Fatal编程技术网

Spring 在hibernate中尝试第二次更新记录时出现异常

Spring 在hibernate中尝试第二次更新记录时出现异常,spring,hibernate,jpa,Spring,Hibernate,Jpa,我们将用户对象保持在会话中。当我们第一次更新它时(使用entityManager.merge(ent)),它工作得很好;但第二次我得到以下例外: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.kids.domain.Child#22] at org.hibern

我们将用户对象保持在会话中。当我们第一次更新它时(使用entityManager.merge(ent)),它工作得很好;但第二次我得到以下例外:

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [com.kids.domain.Child#22]
    at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:492)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:256)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:86)
    at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:781)
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:766)
我将spring与hibernate和jpa一起使用。弹簧在道中注入了完整的管理器。我知道如果我每次都做一个新的find(),然后对该对象进行所有更改,然后合并()。。它会很好用的。。但就我而言,我不能这样做

我还检查了EntityManager的hashcode在两次使用时是否相同;i、 同一个EntityManager实例在这两次都被使用,那么为什么在第二次尝试更新记录时会出现此异常


非常感谢您的帮助。

当您在当前事务中调用merge方法时,hibernate会将给定对象的状态复制到具有相同标识符的持久对象上,并返回新的可管理实体。您需要处理合并在后续操作中返回的可管理实体,因为该实体的版本比DB中的版本要新。

我尝试了很多方法,但都没有成功。即使在互联网上也没有解决办法。最后,当我从实体中删除版本时(即删除hibernate提供的OptimisticLockException支持)。。一切都很顺利。可能,我会尝试自己处理OLE。

我尝试基于此假设进行调试;merge确实返回一个新对象(使用不同的hashcode),但它的版本与原始对象相同。我认为在调用commit(由springframework完成)之后,版本会得到更新