Sve*_*ven 12 java orm hibernate
我有像这个用户几乎相同的问题.
在我的情况下,我从db加载一个实体,我将此实体转换为DataTransferObject,然后我想编辑一个属性,之后我将其转换回entityObject,然后我更新该实体并且hibernate抛出以下错误:
Hibernate Error: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session
Run Code Online (Sandbox Code Playgroud)
显然,问题是我从db检索的对象具有与我想要更新的对象相同的id(就像它应该的那样)但是那些不是同一个对象!
如何管理?谢谢你的帮助...
rom*_*oll 32
您的问题是您之前加载的对象仍然存在于您的休眠会话中.我认为有两种方法可以解决这个问题.
1.)告诉hibernate会话将修改后的对象与会话中的对象合并
session.merge(object)
Run Code Online (Sandbox Code Playgroud)
2.)在将更新的对象写入会话之前,将旧对象踢出会话.session.clear()可能会有效.
Edm*_*984 15
这是Hibernate的一个非常常见的问题.即使您从会话中删除它,该对象仍将保留在Hibernate PersistanceContext中,您将遇到同样的问题.问题还来自于session.contains使用对象相等而不是equals()比较对象的事实......
故事如下:您有对象A和对象B,它们是相同的逻辑对象,但是您的Java堆中有两个不同的对象.而你很久以前在会话中对对象A做了一些事情.
现在,如果你这样做,session.delete(B)你会得到异常,因为你试图删除一个与A具有相同主键但不是A的对象.
解决方案很简单:
Object findAAgain=session.merge(B);
session.delete(findAAgain);
Run Code Online (Sandbox Code Playgroud)
合并首先返回会话中对象的实例.
| 归档时间: |
|
| 查看次数: |
36305 次 |
| 最近记录: |