可能重复:
Spring + Hibernate : a different object with the same identifier value was already associated with the session从休眠中的会话中删除对象?
我已经加载从DB使用的HibernateTemplate根据ID找到一个对象X,然后我得到来自该对象的某些属性,把它添加到另一个对象ÿ来自同一个X id加载的类型。然后,当我尝试saveOrUpdate
对象Y时,hibernate抛出异常具有相同标识符值的不同对象已与会话相关联,我认为这意味着对象X在同一会话中与该属性关联,因此Y可以'保存或更新并且也影响该属性。
如何从会话中删除对象X,所以它不再与该属性
我试图用合并,而不是saveOrUpdate
相关联,它的正常工作,但它是一样的saveOrUpdate
?我的意思是我可以依靠它来添加新记录或更新它们吗?
我已经试过了,但它不起作用 – 2010-07-20 12:02:36
你能解释为什么你甚至需要两个引用X和Y到同一个对象吗? 我认为hibernate保证在一个会话中,该对象只能有一个内存中表示,所以X和Y指的是同一个实体。我认为你将不得不在你的代码中删除一个对象引用,所以当你将objcets链接在一起时,X或者Y将不得不去掉。 我的理解是:如果使用session.evict()去除X,它也会从Yibernate的第一级缓存中删除Y.猜猜这就是为什么它不起作用。但你不能删除X,也不能删除Y. – 2010-07-20 12:35:03
好的,在我的情况下,X有一组Bs,表示层采用这个集合并添加/更新/删除Bs,当保存或更新时,我想知道哪些元素来自这个集合删除,所以我加载与X相同的ID和两者之间的比较,然后更新X然后试图保存它引发问题 – 2010-07-20 13:04:49