我在这个配置中基本上有一些对象(真实的数据模型有点复杂):
- A 与 B 具有多对多关系。(B 具有
inverse="true"
) - B 与 C 具有多对一的关系。(我已
cascade
设置为"save-update"
) - C 是一种类型/类别表。
另外,我可能应该提到主键是由数据库在保存时生成的。
对于我的数据,我有时会遇到 A 有一组不同的 B 对象的问题,而这些 B 对象引用同一个 C 对象。
当我打电话时session.saveOrUpdate(myAObject)
,我收到一个休眠错误说:"a different object with the same identifier value was already associated with the session: C"
. 我知道hibernate不能在同一个会话中两次插入/更新/删除同一个对象,但是有没有办法解决这个问题?这似乎并不罕见。
在我研究这个问题的过程中,我看到有人建议使用session.merge()
,但是当我这样做时,任何“冲突”的对象都会作为空白对象插入到数据库中,并且所有值都设置为 null。显然这不是我们想要的。
[编辑] 我忘了提到的另一件事是(出于我无法控制的架构原因),每次读取或写入都需要在单独的会话中完成。