我们将用户对象保留在会话中。当我们第一次更新它(使用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)
我使用的弹簧,休眠& JPA。 Spring在DAO中注入EntityManager。我明白,如果我会每次都做一个新的find(),然后对该对象进行所有更改,然后merge()..它会正常工作..但在我的情况下,我不能这样做。
我也检查过,使用的EntityManager的哈希码是相同的时间;即同一个EntityManager实例正在使用这两个时间那么为什么它在尝试第二次更新记录时会产生此异常
任何帮助将不胜感激。
我试图根据这个假设进行调试;合并确实会返回一个新的对象(具有不同的哈希码),但它与原始对象具有相同的版本。我认为在调用commit后版本会更新(这是由spring框架完成的) – Deepak