我有一个有点奇怪的问题,我不知道JPA是否支持这个问题:
我有一个@Entity Child
和另外两个实体@Entity Parent1
和@Entity Parent2
。
我想做的是,Parent1和Child之间有@OneToMany
关系,Parent2和Child之间有另一个@OneToMany
关系。
原因是我希望删除Parent1时删除Childs,如果删除Parent2则删除Childs。
我尝试了很多种组合,但我无法让它发挥作用......
TL; DR :任何没有Parent1和Parent2的孩子都应该被删除。
这是我现在的代码(省略@Id和getter / setters):
@Entity
class Parent1 {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
Set<Child> childs;
}
@Entity
class Parent2 {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
Set<Child> childs;
}
@Entity
class Child {
String name;
}
谢谢,
答案 0 :(得分:1)
阅读OneToMany.ophanRemoval,你可以试试这个:
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval=true)
Set<Child> childs;
祝你好运!
答案 1 :(得分:1)
是的,根据@jmvivo的回答你需要使用orphanRemoval = true是你的用例的解决方案, 这里根据Oracle link
当从关系中删除一对一或一对多关系中的目标实体时,通常需要将删除操作级联到目标实体。此类目标实体被视为“孤儿”,orphanRemoval属性可用于指定应删除孤立实体。例如,如果订单包含多个订单项,并且其中一个订单项已从订单中删除,则已删除的订单项会被视为孤儿。如果将orphanRemoval设置为true,则在从订单中删除订单项时,系统商品实体将被删除。
您可能还希望在进一步了解您的要求时查看以下SO问题
答案 2 :(得分:0)
您必须在服务/ DAO级别上处理此问题,我认为您不会为此特定用例找到任何JPA支持。只需在删除父/子之前手动检查条件。