我有以下具有父子关系的实体:
public class Parent {
@Id @GeneratedValue String id;
@Version Long version;
@OneToMany(mappedBy = "parent", orphanRemoval = true)
@Cascade({CascadeType.ALL})
Set<Child> children;
// getters and setters
}
public class Child {
@Id @GeneratedValue String id;
@ManyToOne
@JoinColumn("parent_id")
Parent parent;
// getters and setters
}
我可以添加孩子,更新孩子,但我不能删除孩子。这里有什么问题,如何解决?
提前致谢。
答案 0 :(得分:1)
您有一个双向关联,您需要从Child
类中删除父类的链接,尝试将Parent引用为null,并将Set<Child>
设置为新的{{1或者你的实现是什么。
然后保存将从表中删除子项的更改。
此操作只能在活动交易的上下文中使用。
HashSet<Child>
转移托管实例以删除。在下一次刷新或提交时,实例将从数据存储中删除。访问已删除的实体具有未定义的结果。
对于给定的实体A,remove方法的行为如下:
public void remove(Object entity);
删除操作会递归A的所有关系字段,其级联包括If A is a new entity, it is ignored. However, the remove operation cascades as defined below.
If A is an existing managed entity, it becomes removed.
If A is a removed entity, it is ignored.
If A is a detached entity, an IllegalArgumentException is thrown.
了解有关实体lifecycle的更多信息