我有两个实体(父和子),它们之间有一个OneToMany关系。
父母有儿童名单,儿童有父母字段。
孩子有
@ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST})
在父字段中。
家长
@OneToMany(mappedBy="parent", cascade = CascadeType.ALL, orphanRemoval = true)
在子列表中。
我想找到一种方法将一个孩子的父母替换为另一个孩子。 (即将ChildA的Parent从ParentA更改为ParentB)
因为我想要遵循父列表,我想从列表中删除子项。 问题是即使我首先将ChildA添加到ParentB的列表中,也将ChildA的Parent字段设置为ParentB,然后将其从ParentA的Child列表中删除,因为它以某种方式完全删除了Child(显然是因为OrphanRemoval)
如何在不更改hibernate配置的情况下进行此交换 和从删除ParentA的列表(OrphanRemoval等)?
修改
我更愿意避免使用entityManager.flush()
答案 0 :(得分:1)
尝试这种方式(ChildA将ParentA作为父级):
我认为步骤4和5可能没有必要,但我不确定,你必须托盘。
你可以用以下代码替换4和5个步骤:session.evict(ParentA)