随笔 - 0  文章 - 12  trackbacks - 0
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

留言簿

文章分类

文章档案

搜索

  •  

最新评论

    这个错误我一共遇到过两次,一直没有找到很好的解决方案,这个错误产生

原因相信大家都知道,因为在hibernate中同一个session里面有了两个相同标识

但是是不同实体,当这时运行saveOrUpdate(object)操作的时候就会报这个错误。

呵呵,也许你会说,你这么说跟没说没什么区别,我承认,呵呵,我不知道具体

为什么会产生这个错误,要不然也不会很久都没有解决,现在,给出一个临时的

解决方案,给向我一样,没有办法找到根源的人一个能够继续执行下去的方法

(当然是对的,只是不是从产生原因入手)

    其实要解决这个问题很简单,只需要进行session.clean()操作就可以解决

了,但是你在clean操作后面又进行了saveOrUpdate(object)操作,有可能

会报出"
Found two representations of same collection"我找了很多资料,

没有什么很好的解释,其中这篇文章帮助最大

http://opensource.atlassian.com/projects/hibernate/browse/HHH-509

最后通过session.refresh(object)方法就可以解决了,注意,当object不

是数据库中已有数据的对象的时候,不能使用session.refresh(object)因

为refresh是从hibernate的session中去重新取object,如果session中没

有这个对象,则会报错所以当你使用saveOrUpdate(object)之前还需要判

断一下


    当然这个问题最容易解决的办法还是使用Hibernate里面自带的merge()

方法。不过我始终觉得碰到问题就用这种软件自带的非常用方法

(和saveOrUpdate(),save(),update()相比)感觉十分不爽。

    后来我还发现这种错误经常出现在一对多映射和多对多映射,请大家在

使用一对多和多对多映射的时候要小心一些

Hibernate 疑难异常及处理

1、a different object with the same identifier value was already associated with the session。

  错误原因:在hibernate中同一个session里面有了两个相同标识但是是不同实体。

  解决方法一:session.clean()

  PS:如果在clean操作后面又进行了saveOrUpdate(object)等改变数据状态的操作,有可能会报出"Found two representations of same collection"异常。

  解决方法二:session.refresh(object)

  PS:当object不是数据库中已有数据的对象的时候,不能使用session.refresh(object)因为该方法是从hibernate的session中去重新取object,如果session中没有这个对象,则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下。

  解决方法三:session.merge(object)

  PS:Hibernate里面自带的方法,推荐使用。

2、Found two representations of same collection

  错误原因:见1。

  解决方法:session.merge(object)

以上两中异常经常出现在一对多映射和多对多映射中

posted on 2007-11-02 12:30 Eric huang 阅读(150282) 评论(12)  编辑  收藏 所属分类: Hibernate

FeedBack:
# re: [转]解决a different object with the same identifier value was already associated with the session错误  2008-10-10 13:59 网友
好文章 收藏 我也遇到这个问题了  回复  更多评论
  
# re: [转]解决a different object with the same identifier value was already associated with the session错误  2012-03-27 14:34 a249091309
楼主能否加QQ249091309 帮忙下  回复  更多评论
  
# re: [转]解决a different object with the same identifier value was already associated with the session错误  2013-09-25 19:59 ljtt1230
这个是Hibernate持久化对象的问题  回复  更多评论
  
# re: [转]解决a different object with the same identifier value was already associated with the session错误  2013-11-25 11:08 mr.jia
这个问题主要是你在做sava方法或saveOrUpdate(object)前作了getById的操作,大家换个获取数据的防范,把getById 的方案干掉就OK  回复  更多评论
  
# re: [转]解决a different object with the same identifier value was already associated with the session错误  2014-02-22 16:14 hayo
碰到这种问题,根本上是对hibernate的不理解啊  回复  更多评论
  
# re: [转]解决a different object with the same identifier value was already associated with the session错误  2014-08-29 17:10 mrapem
我知道原因:
今天刚解决的, 因为你从数据库里查出来的一行记录, 然后你又保存了另一条记录,
记录冲突了, 所以你应该在关闭session之后呢, 还是保存数据库的这条记录..
不知道你们听懂了没有!  回复  更多评论
  
# re: [转]解决a different object with the same identifier value was already associated with the session错误 [未登录] 2014-12-11 16:01 1
@mrapem
不明白啊   回复  更多评论
  
# re: [转]解决a different object with the same identifier value was already associated with the session错误 [未登录] 2015-06-04 09:44 123
在两个重复的对象中间调用session.flush();session.clear();也可以解决问题,如果碰到后面对象调用是包装方法的时候  回复  更多评论
  
# re: [转]解决a different object with the same identifier value was already associated with the session错误  2015-06-04 17:27 wwl
我不知道你们是怎么回事,我的是因为在一个事务里进行了两次保存或者更新同一个实体的操作,及在一个是操作未提交时又进行了同样的操作,我这个是因为判断条件写反了导致的,不知道对大家有咩有帮助  回复  更多评论
  
# re: [转]解决a different object with the same identifier value was already associated with the session错误  2015-07-10 14:28 游客
谢谢@mr.jia
  回复  更多评论
  
# re: [转]解决a different object with the same identifier value was already associated with the session错误  2016-05-04 16:05 xlj
我是因为前面读了它的数据库,然后执行删除后添加的操作(就是更新),然后就报错了.解决办法是把读取数据库的部分放到别的位置,让他俩分离  回复  更多评论
  
# re: [转]解决a different object with the same identifier value was already associated with the session错误  2016-08-10 09:53 李恒
@mrapem
一句惊醒梦中人
这个是正解,我就是这样的情况  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: