org.hibernate.NonUniqueObjectException

今天在为项目进行单元测试时,使用hibernate的update方法,出现如下异常:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:
org.hibernate.engine.internal.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:689)
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.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:55)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireUpdate(SessionImpl.java:775)
at org.hibernate.internal.SessionImpl.update(SessionImpl.java:767)
at org.hibernate.internal.SessionImpl.update(SessionImpl.java:763)
……
根据异常信息,我们可以知道在hibernate中,同一个session中存在两个不同的实体,但是这两个实体的标识却是相同的。也就是说:在session中有两个不同的对象关联了同一个标识。
解决方案一:
在使用update方法之前,创建另一个session或者使用evice方法删除持久化对象,使其状态转变为游离态
注:效率不高
解决方案二:
即然是根据标识更新对象,那么我们只需要修改我们需要修改的字段。既使用同一个对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值