关闭

NonUniqueObjectException

395人阅读 评论(0) 收藏 举报

使用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.

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:84094次
    • 积分:1634
    • 等级:
    • 排名:千里之外
    • 原创:80篇
    • 转载:20篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论