java - Hibernate 4/Spring 3.2 NonUniqueObjectException

标签 java spring hibernate

好吧,我对 Hibernate/Spring 非常非常非常。我必须从 Hibernate 2 - Hibernate 4 和 Spring 1 - Spring 3 升级现有代码。

在向数据库传递多条消息时尝试调用 saveOrUpdate 时,我不断收到此异常(当我只发送一条消息时,它工作正常):

  org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session
  at org.hibernate.engine.internal.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:686)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:293)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:239)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
    at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:728)
    at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:720)
    at org.hibernate.engine.spi.CascadingAction$5.cascade(CascadingAction.java:258)
    at org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380)
    at org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)
    at org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
    at org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)
    at org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:423)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:264)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:136)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:114)
    at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
    at org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:728)
    at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:720)
    at org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:716)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:352)
    at $Proxy9.saveOrUpdate(Unknown Source)

我用谷歌搜索直到我脸色发青!我尝试过使用 merge() 。这不会给出异常,但合并会将 NULL 值插入数据库。

我尝试过使用 evict()、flush(),同样的错误。

这是导致错误的方法:

public void saveOrUpdate(Object obj)  {
  Session session = null;
  SessionFactory sf = getSessionFactory();

  try {
        try {
            session = sf.getCurrentSession();
        } catch (Exception e) {
            session = sf.openSession();
        }

        System.out.println("Object: " + obj);

        session.beginTransaction();
        session.saveOrUpdate(obj);
        session.getTransaction().commit();

        System.out.println("DONE");

    } catch (Exception e) {
        e.printStackTrace();
    }
}

任何帮助将不胜感激!

最佳答案

您能否提供映射和调用 saveOrUpdate 方法的代码。看起来错误是在调用 saveOrUpdate 的代码中

关于java - Hibernate 4/Spring 3.2 NonUniqueObjectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13469892/

相关文章:

hibernate - 事务提交后的事件 Spring JPA

hibernate - Spring + hibernate : transaction commits but data is not persisted

java - Mysql,Hibernate - 插入表时,它说字段没有默认值

java - Java Collection 的removeAll(Collection c) 方法是否强制对c 的元素进行垃圾回收?

java - Jersey & Spring 托管供应商

java - Drools 无法与 Spring Boot 一起正常工作

java - 如何使用 MongoDB 实现 ReactiveUserDetailsS​​ervice

java - 如何将uri图像转换为canvas ondraw方法

java - 如何使用 do-while 循环再次检查用户输入?

java - jsp 中使用 java 操作进行 ajax 调用 (J2EE)