hiberante的update失败问题

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

上面就是今天在调程序的时候抛出的hibernate的bug,在网上搜了很多,但是最终的解决方案并不使用,因为项目中hibernate的一些细节已经被封装了,不能使用session.xxx;

大家可以看一下这个总结:http://www.blogjava.net/amigoxie/archive/2008/01/07/173342.html

 

最后请教别人才得到解决的,原来在hibernate更新的时候是需要与缓存中对象的地址进行对比的,看看是不是同一个对象。一个简单的例子

updateMethod(Object old, Object new)

更新的时候,在hibernate的updateEntity(Object old),这里应该使用缓存中的Object对象,这样才不会发生地址的改变。如果使用new出来的新对象,你会发现其实它与缓存中的对象是不一样的,即使它们的所有属性都相同。关于两者的地址上的差异,可以看对象后面@符合后面的数字。

 

你可能感兴趣的:(Hibernate,object,session)