zoukankan      html  css  js  c++  java
  • org.hibernate.NonUniqueObjectException

    错误如下:
    2017-3-29 15:17:52~ERROR~org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:253)~Servlet.service() for servlet action threw exception
    org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.tcc.operator.dto.TblTcclinkClosure#1002]
    at org.hibernate.engine.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:556)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:258)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:216)
    at org.hibernate.event.def.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:33)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
    at org.hibernate.impl.SessionImpl.fireUpdate(SessionImpl.java:559)
    at org.hibernate.impl.SessionImpl.update(SessionImpl.java:547)
    at org.hibernate.impl.SessionImpl.update(SessionImpl.java:539)
    at com.tcc.operator.biz.OperatorBiz.updateLinkclosure(OperatorBiz.java:520)
    at com.tcc.operator.action.UpdateConstructionAction.execute(UpdateConstructionAction.java:38)

    一开始session.update(Object o)出现这样的问题,但是通过使用session.merge(Object o)解决了,因为merge()会判断session pool中是否有同样的对象,有则update(),没有则seve()。
    但后来发现session.delete(Object o)也出现同样的问题。没办法,只能找根本原因。最后发现啊extends Action的时候我new了一个需要更新的Object,然后用ActionForm里的值赋值。这样一来,提供给hibernate更新的对象和你本来想要更新的对象属于不同对象,但却有相同的标识。因此hibernate抛出NonUniqueObjectException。
    解决方法是,通过ActionForm里的标识,find真正要更新的对象,然后用ActionForm里的值替换该对象的值。
    再执行update()或delete();问题就解决了。

    作者:JamelAr
    个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    mySQL安装的时候一直卡在starting server这里解决办法
    编译安装nginx
    用户访问网站原理及流程
    mysql备份及恢复
    sed
    mysql 基础
    nginx优化
    mysql 三种日志
    tr
    date
  • 原文地址:https://www.cnblogs.com/JamelAr/p/6640568.html
Copyright © 2011-2022 走看看