org.hibernate.NonUniqueObjectException

来源:互联网 发布:小霸王网络机顶盒 编辑:程序博客网 时间:2024/05/01 03:36


session.update(Object   o)出现这样的问题,但是通过使用session.merge(Object   o)解决了,因为merge()会判断session   pool中是否有同样的对象(id相同),有则update(),没有则save()。

但后来发现session.delete(Object   o)也出现同样的问题。没办法,只能找根本原因。最后发现extends   Action的时候我 new 了一个需要更新的Object,然后用ActionForm里的值赋值。这样一来,提供给hibernate更新的对象和你本来想要更新的对象属于不同对象,但却有相同的标识。因此hibernate抛出NonUniqueObjectException。

解决方法是,通过ActionForm里的id,find(id),找到id对应的对象,然后用ActionForm里的值替换该对象的值。

再执行update()或delete(),即可。

附自己的代码:

CapDefBatchcodeLog entity = null;
entity = this.publicDAO.queryForClazz(CapDefBatchcodeLog.class, sqlTest,args3);entity.setActiveFlag("0");modify(entity);


        CapDefBatchcodeLog entity = this.publicDAO.queryForClazz(CapDefBatchcodeLog.class, sqlTest,args3);entity.setActiveFlag("0");
publicDAO.update(entity);