Hibernate 疑难杂症

本文详细解析了在使用Hibernate时遇到的adifferentobjectwiththesameidentifiervaluewasalreadyassociatedwiththesession异常,并提供了三种解决方案:session.clean()、session.refresh(object)、session.merge(object)。同时,解释了Foundtworepresentationsofsamecollection异常及其解决方法。重点在于一对多和多对多映射场景下如何避免和处理此类错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作者:小生、我怕怕

网址:http://www.apkbank.net

          http://www.17zouguo.net

转载请注明该页面地址。

 

今天遇到了一个问题  a different object with the same identifier value was already associated with the session  很难解决,查了查文档,总结如下。

 

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)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值