`
虚弱的java
  • 浏览: 160194 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
社区版块
存档分类
最新评论

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics