gpt4 book ai didi

java - 在 hibernate 状态下替换父级的最佳方法

转载 作者:行者123 更新时间:2023-12-02 11:19:26 25 4
gpt4 key购买 nike

我有 2 个实体(父实体和子实体),它们之间具有 OneToMany 关系。

父项有子项列表,子项有父项字段。

child 有

 @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST})

在“父级”字段中。

父级有

@OneToMany(mappedBy="parent", cascade = CascadeType.ALL, orphanRemoval = true)

在子列表中。

我想找到一种方法将一个 child 的 parent 替换为另一个 parent 。 (即将 ChildA 的 Parent 从 ParentA 更改为 ParentB)

因为我想关注父级列表,所以我想从列表中删除子级。问题是,即使我首先将 ChildA 添加到 ParentB 的列表,将 ChildA 的 Parent 字段设置为 ParentB,然后才将其从 ParentA 的 Child 列表中删除,不知何故,它完全删除了 Child(显然是因为 OrphanRemoval)

如何在不更改 hibernate 配置的情况下进行此交换 并从 ParentA 的列表中删除(OrphanRemoval 等)?

<小时/>

编辑

我更喜欢避免使用entityManager.flush()

最佳答案

尝试这种方式(ChildA 将 ParentA 作为父级):

  1. 加载父级A
  2. 将 ChildA 父级设置为 NULL
  3. 拯救 child A
  4. 关闭或刷新 session
  5. 公开 session
  6. 将 ParentB 设置为 ChildA
  7. 合并 ChildA(使用合并而不是 save/update/saveOrUpdate)

我认为步骤 4 和 5 可能没有必要,但我不确定,你必须将其托盘化。

也许 4 和 5 个步骤可以替换为:session.evict(ParentA)

关于java - 在 hibernate 状态下替换父级的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50037494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com