【发布时间】: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