【问题标题】:deleted object would be re-saved by cascade (remove deleted object from associations) : Error while trying to attach a child from one parent to other级联将重新保存已删除的对象(从关联中删除已删除的对象):尝试将孩子从一个父级附加到另一个父级时出错
【发布时间】:2021-04-16 07:34:38
【问题描述】:

在使用 hibernate 5.0.9 的应用程序中有嵌套的父子关系,其中 parent 是关系所有者,如下所示。

表格:-

ParentEntity
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id")
@OrderBy("listOrder ASC, dateCreated ASC")
private Set<ChildEntity> childCollection;

ChildEntity
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "child_id")
@OrderBy("col_id ASC, list_order ASC")
private Set<GrandChildEntity> grandChildCollection;

GrandChildEntity

我想按如下方式更新父母的孩子和孙子:-

从 DB 中读取现有的父级并获取所有子级及其孙子级的集合。 将现有的 grandChild 从一个孩子移动到另一个孩子,因此要求只需要更​​新 GrandChild 的孩子的引用,而不是必须不触及 GrandChild 数据库中的所有列。

我正在尝试使用 hibernate merge by 来执行此操作,但它抛出异常:

已删除的对象将被级联重新保存(从关联中删除已删除的对象)

如何在单个事务中从现有子集合中移除孙子集合并附加到其他子集合??

【问题讨论】:

    标签: hibernate parent-child cascade hibernate-onetomany hibernate-cascade


    【解决方案1】:

    我认为这与您在应用中使用的映射不完全相同?你也在使用 orphanRemoval 吗?我认为跨多个关联的孤立删除不起作用,因此将实体从一对多关联移动到另一个关联仍会将实体标记为孤立。移除孤儿移除配置,当您确定实体应该被移除时手动移除实体。

    除此之外,我还建议您将关联设为双向并在多方使用mappedBy。以便 FK 列侧改为驱动关联,这使您能够通过更改其父对象来“移动”对象。在使用Set 的关联上使用@OrderBy 也是没有意义的。只需删除该注释即可。

    【讨论】:

      猜你喜欢
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 2013-10-03
      • 2019-06-30
      • 1970-01-01
      相关资源
      最近更新 更多