NonUniqueObjectException

原创 2011年01月10日 17:18:00

使用hibernate保存对象时,出现如下错误:

org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.lee.dao.hibernate.User#12]

网上查阅资料后,找到解决办法:

解决方法:

     使用 hibernate 3 的 merge 方法. session.merge(newDetail)即可,它会在 session 缓存中找到持久化对象,把新对象的属性赋过去,再保存原session中的持久化对象。

        如果在session或数据库中没有的对象,用merge方法的话,它也能够帮你把记录 insert 到表中,相当于 save 方法。

上面是一个简单的例子,实际业务中可能是经过一番复杂的操作后自己也很难搞清楚 new 的一个新对象在 session/数据库中是否已存在。所以第一种方法你需要清楚你的每一个对象状态,第二种方法在 hibernate 3 中就比较通用一些。

附 hibernate javadoc 对 session.merge() 方法的注释:

Copy the state of the given object onto the persistent object with the same identifier. If there is no persistent instance currently associated with the session, it will be loaded. Return the persistent instance. If the given instance is unsaved, save a copy of and return it as a newly persistent instance. The given instance does not become associated with the session. This operation cascades to associated instances if the association is mapped with cascade="merge".

The semantics of this method are defined by JSR-220.

相关文章推荐

org.hibernate.NonUniqueObjectException学习

本文源自:http://wdmcln.javaeye.com/blog/154066Exception:a different object with the same identifier valu...

org.hibernate.NonUniqueObjectException报错后,从配置文件中的hibernate-inverse与cascade 得到解决问题

今天,在写代码的时候多复制了行代码,即重复对SET对象添加了两次相同的对象,由于调用保存的方法不是自己写的,其中代码只用了一句session.save(object),就保存了关联的SET对象,但Hi...

关于org.hibernate.NonUniqueObjectException出现的一种情况,以及解决方法。

先放一下问题: org.hibernate.NonUniqueObjectException: a different object with the same identifier value...

Hibernate Session篇--org.hibernate.NonUniqueObjectException分析及解决

1 问题描述: 用hibernate做修改和删除的时候,有时候会遇到 org.hibernate.NonUniqueObjectException 异常, a different object w...

org.hibernate.NonUniqueObjectException

org.springframework.dao.DuplicateKeyException: A different object with the same identifier value was...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NonUniqueObjectException
举报原因:
原因补充:

(最多只允许输入30个字)