hibernate a different object with the same identifier value was already associated with the session

来源:互联网 发布:淘宝上怎么买弓弩 编辑:程序博客网 时间:2024/05/16 19:49

问题情况:使用hibernate来进行对对象的save、update操作时,出现了exception,导致数据保存不成功,具体报错如是:

Exception in thread "main" org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session:  

在hibernate中同一个session里面有了两个相同标识但是是不同实体。


楼主遇到的使用情况是  在同一个方法中,对数据库同一张表进行了多次session.update()操作;


解决方案: 将session.update(object c)或session.saveOrUpdate(object c)方法替换为session.merge (object c);


session.merge()方法作用:

新new一个对象,如果该对象设置了ID,则这个对象就当作游离态处理:

当ID在数据库中不能找到时,用update的话肯定会报异常,然而用merge的话,就会insert。

当ID在数据库中能找到的时候,update与merge的执行效果都是更新数据,发出update语句;

如果没有设置ID的话,则这个对象就当作瞬态处理:

用update的话,由于没有ID,所以会报异常,merge此时则会保存数据,根据ID生产策略生成一条数据;



问题解析:http://lcy0202.iteye.com/blog/1453868

 


阅读全文
0 0
原创粉丝点击