在这个配置中,我本质上有一些对象(实际的数据模型要复杂一些):
- 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"
。我知道休眠不能在同一会话中两次插入/更新/删除相同的对象,但是有什么办法解决吗?这似乎不是一种罕见的情况。
在研究此问题的过程中,我看到人们建议使用session.merge()
,但是当我这样做时,所有“冲突”对象都会作为空白对象插入数据库,并且所有值都设置为null。显然,这不是我们想要的。
[编辑]我忘了提及的另一件事是(由于无法控制的体系结构原因),每次读取或写入都需要在单独的会话中完成。