zoukankan      html  css  js  c++  java
  • 解决 a different object with the same identifier value was already associated with the session

    1. <span style="font-family:Microsoft YaHei;font-size:12px;">this.getHibernateTemplate().clear();//在一对多,多对多的时候,常常会遇到这样的错误:a different object with the same identifier value was already associated with the session   
    2.     getHibernateTemplate().update(user);</span>  


    推荐文章:

      1. <span style="font-family:Microsoft YaHei;font-size:12px;">这个问题,我把对象赋值为NULL,也是很好用的.在我的系统中,更新好用了,可是插入不好用了.没改前,是插入好用,而更新不好用.本来是系统中的问题,可是,catch只是捕捉到,从但是,没有把log打印出来,找原因实在是难找.在高度数据库时,最好把异常捕捉中的信息打印出来.org.springframework.orm.hibernate.HibernateSystemException: a different object with the same identifier value was already associated with the session: 4443398, of class: com.onewaveinc.media.cms.entity.SyncImportFolder; nested exception is net.sf.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 4443398, of class: com.onewaveinc.media.cms.entity.SyncImportFolder  
      2. net.sf.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: 4443398, of class: com.onewaveinc.media.cms.entity.SyncImportFolder  
      3. at net.sf.hibernate.impl.SessionImpl.doSave(SessionImpl.java:852)  
      4. at net.sf.hibernate.impl.SessionImpl.saveWithGeneratedIdentifier(SessionImpl.java:790)  
      5. at net.sf.hibernate.impl.SessionImpl.save(SessionImpl.java:749)  
      6. at org.springframework.orm.hibernate.HibernateTemplate$9.doInHibernate(HibernateTemplate.java:555)  
      7. at org.springframework.orm.hibernate.HibernateTemplate.execute(HibernateTemplate.java:363)  
      8. at org.springframework.orm.hibernate.HibernateTemplate.save(HibernateTemplate.java:552)  
      9. at com.onewaveinc.media.cms.dao.impl.SyncFolderHibernateDao.insertHavaIndex(SyncFolderHibernateDao.java:31)  
      10. at com.onewaveinc.media.cms.manager.SyncFolderManager.doImportSyncFolder(SyncFolderManager.java:193)  
      11. at com.onewaveinc.media.cms.manager.SyncFolderManager.insertHavaIndex(SyncFolderManager.java:107)  
      12. at com.onewaveinc.media.cms.manager.SyncFolderManager.importSyncFolderList(SyncFolderManager.java:607)  
      13. at com.onewaveinc.media.cms.web.SyncFolderImportAction.post(SyncFolderImportAction.java:41)  
      14. at com.onewaveinc.media.common.web.HttpMethodAction.execute(HttpMethodAction.java:36)  
      15. at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)  
      16. at com.onewaveinc.media.web.struts.MediaRequestProcessor.processActionPerform(MediaRequestProcessor.java:51)  
      17. at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)  
      18. at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)  
      19. at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)  
      20. at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)  
      21. at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)  
      22. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)  
      23. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)  
      24. at org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:41)  
      25. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)  
      26. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)  
      27. at com.onewaveinc.appcommon.security.web.utils.SecurityFilter.doFilter(SecurityFilter.java:89)  
      28. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)  
      29. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)  
      30. at org.springframework.orm.hibernate.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)  
      31. at com.onewaveinc.media.common.web.SpringHibernateSessionFilter.doFilterInternal(SpringHibernateSessionFilter.java:50)  
      32. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)  
      33. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)  
      34. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)  
      35. at com.onewaveinc.media.web.struts.StrutsValidateFilter.doFilter(StrutsValidateFilter.java:38)  
      36. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)  
      37. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)  
      38. at com.onewaveinc.appcommon.utils.web.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:168)  
      39. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186)  
      40. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)  
      41. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)  
      42. at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)  
      43. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)  
      44. at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)  
      45. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)  
      46. at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)  
      47. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)  
      48. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)  
      49. at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)  
      50. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)  
      51. at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)  
      52. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)  
      53. at org.apache.catalina.core.StandardEngin.ve.invoke(StandardEngin.ve.java:109)  
      54. at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)  
      55. at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)  
      56. at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)  
      57. at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)  
      58. at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)  
      59. at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)  
      60. at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)  
      61. at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)  
      62. at java.lang.Thread.run(Thread.java:534)  
      63.   
      64.   
      65.   
      66. a different object with the same identifier value was already associated with the session  
      67. 一个经典的hibernate错误:a different object with the same identifier value was already associated with the session xxxx  
      68. hibernate3.0以上使用merge()来合并两个session中的同一对象  
      69. 具体到我自己的代码就是  
      70. public Object getDomain(Object obj) {  
      71.   getHibernateTemplate().refresh(obj);  
      72.   return obj;  
      73.   }  
      74.   public void deleteDomain(Object obj) {  
      75.   obj = getHibernateTemplate().merge(obj);  
      76.   getHibernateTemplate().delete(obj);  
      77.   }  
      78.   
      79.   
      80. 解决a different object with the same identifier value was already associated with the session错误   
      81.   
      82. 这个错误我一共遇到过两次,一直没有找到很好的解决方案,这个错误产生原因相信大家都知道,因为在hibernate中同一个session里面有了两个相同标识但是是不同实体,当这时运行saveOrUpdate(object)操作的时候就会报这个错误。呵呵,也许你会说,你这么说跟没说没什么区别,我承认,呵呵,我不知道具体为什么会产生这个错误,要不然也不会很久都没有解决,现在,给出一个临时的解决方案,给向我一样,没有办法找到根源的人一个能够继续执行下去的方法(当然是对的,只是不是从产生原因入手)  
      83.   
      84. 其实要解决这个问题很简单,只需要进行session.clean()操作就可以解决了,但是你在clean操作后面又进行了saveOrUpdate(object)操作,有可能会报出"Found two representations of same collection",我找了很多资料,没有什么很好的解释,其中这篇文章帮助最大[url]http://opensource.atlassian.com/projects/hibernate/browse/HHH-509[/url]。  
      85.   
      86. 最后通过session.refresh(object)方法就可以解决了,注意,当object不是数据库中已有数据的对象的时候,不能使用session.refresh(object)因为refresh是从hibernate的session中去重新取object,如果session中没有这个对象,则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下  
      87.   
      88. 当然这个问题最容易解决的办法还是使用Hibernate里面自带的merge()方法。不过我始终觉得碰到问题就用这种软件自带的非常用方法(和saveOrUpdate(),save(),update()相比)感觉十分不爽。  
      89.   
      90. 后来我还发现这种错误经常出现在一对多映射和多对多映射,请大家在使用一对多和多对多映射的时候要小心一些  
      91.   
      92.   
      93. Hibernate 疑难异常及处理  
      94.   
      95.   
      96. 1、a different object with the same identifier value was already associated with the session。  
      97.   
      98.   错误原因:在hibernate中同一个session里面有了两个相同标识但是是不同实体。  
      99.   
      100.   解决方法一:session.clean()  
      101.   
      102.   PS:如果在clean操作后面又进行了saveOrUpdate(object)等改变数据状态的操作,有可能会报出"Found two representations of same collection"异常。  
      103.   
      104.   解决方法二:session.refresh(object)  
      105.   
      106.   PS:当object不是数据库中已有数据的对象的时候,不能使用session.refresh(object)因为该方法是从hibernate的session中去重新取object,如果session中没有这个对象,则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下。  
      107.   
      108.   解决方法三:session.merge(object)  
      109.   
      110.   PS:Hibernate里面自带的方法,推荐使用。  
      111.   
      112. 2、Found two representations of same collection  
      113.   
      114.   错误原因:见1。  
      115.   
      116.   解决方法:session.merge(object)  
      117.   
      118. 以上两中异常经常出现在一对多映射和多对多映射中  
      119.   
      120.   
      121. a different object with the same identifier value was already associated with the session  
      122. 一个经典的hibernate错误:a different object with the same identifier value was already associated with the session xxxx  
      123. hibernate3.0以上使用merge()来合并两个session中的同一对象  
      124. 具体到我自己的代码就是  
      125. public Object getDomain(Object obj) {  
      126.   getHibernateTemplate().refresh(obj);  
      127.   return obj;  
      128.   }  
      129.   public void deleteDomain(Object obj) {  
      130.   obj = getHibernateTemplate().merge(obj);  
      131.   getHibernateTemplate().delete(obj);  
      132.   }  
      133.   
      134. ====================我是分割线===================  
      135.   
      136. 其实我的解决办法是把obj给重新merge一下,注意红字部分  
      137. public Serializable save(Object persistentObject) throws DaoException {  
      138.   try {  
      139.           
      140.   Session session = this.openSession();  
      141.   beginTransaction();  
      142.   persistentObject = session.merge(persistentObject);  
      143.   Serializable id = session.save(persistentObject);  
      144.   if (autoCommit)  
      145.   commitTransaction();  
      146.   return id;  
      147.   } catch (HibernateException ex) {  
      148.   log.error("Fail to save persistentObject", ex);  
      149.   throw new DaoException("Fail to save persistentObject", ex);  
      150.   } finally {  
      151.   if (autoCloseSession)  
      152.   closeSession();  
      153.   }  
      154.   }  
      155. </span> 
  • 相关阅读:
    太原市圆通快递网点
    快递单号查询小工具
    C#快递单号查询源码
    爱快递快递接口使用说明
    如何把网站及数据库部署到Windows Azure
    从window.console&&console.log(123)浅谈JS的且运算逻辑(&&)
    C# Enum 简易权限设计 使用FlagsAttribute属性
    Lambda 表达式(C# 编程指南)
    C# list使用方法
    SharePoint Server 2013介绍v2
  • 原文地址:https://www.cnblogs.com/smallfa/p/6233873.html
Copyright © 2011-2022 走看看