org.hibernate.NonUniqueObjectException错误解决

今天在维护一段老代码的时候遇到了org.hibernate.NonUniqueObjectException错误。错误的详细提示为:

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

根据stackoverflow上的解释,此处是因为同一个session里面存在主键相同的两个对象,而且后来对其中一个对象做了saveupdate操作。

此处的代码场景为传入了一个对象id我必须获取对象的其它属性才可以完成新功能。由于要兼容以前的代码,直接传入对象不可行。通过对象id获取对象然后获取对象其它属性在现在的代码体系中是最简单的。一通查找后,merge是一个比较好的思路。但后来我还是选择了evict。
依据官方文档:

 evict

void evict(Object object)
       throws HibernateException

Remove this instance from the session cache. Changes to the instance will not be synchronized with the database. This operation cascades to associated instances if the association is mapped with cascade=\"evict\".

Parameters:
    object - a persistent instance 
Throws:
    HibernateException

evict 把可以把对象在session的缓存中清除。

发表评论

电子邮件地址不会被公开。 必填项已用*标注