Java 使两个不同的父实体通过JPA中的@OneToMany引用子实体

Java 使两个不同的父实体通过JPA中的@OneToMany引用子实体,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,我有一个有点奇怪的问题,我不知道JPA是否支持这一点: 我有一个@Entity-Child和另外两个实体,@Entity-Parent1和@Entity-Parent2 我想做的是,在父母1和孩子之间建立一种@OneToMany关系,在父母2和孩子之间建立另一种@OneToMany关系 原因是,如果删除了孩子的父项1,我希望将其删除;如果删除了孩子的父项2,则希望将其删除 我尝试了很多组合,但我无法让它工作 TL;DR:应删除没有父项1和父项2的任何子项 这是我现在的代码(ommitting@I

我有一个有点奇怪的问题,我不知道JPA是否支持这一点:

我有一个
@Entity-Child
和另外两个实体,
@Entity-Parent1
@Entity-Parent2

我想做的是,在父母1和孩子之间建立一种
@OneToMany
关系,在父母2和孩子之间建立另一种
@OneToMany
关系

原因是,如果删除了孩子的父项1,我希望将其删除;如果删除了孩子的父项2,则希望将其删除

我尝试了很多组合,但我无法让它工作

TL;DR:应删除没有父项1和父项2的任何子项

这是我现在的代码(ommitting@Id和getter/setters):

@实体
班级家长1{
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
设置孩子;
}
@实体
班级家长2{
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
设置孩子;
}
@实体
班童{
字符串名;
}
谢谢你,阅读,你可以试试这个:

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval=true)
Set<Child> childs;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,orphanRemoving=true)
设置孩子;

祝你好运

是,根据@jmvivo答案,您需要使用OrphanRemoving=true是您用例的解决方案, 这是根据甲骨文在这

当从关系中删除一对一或一对多关系中的目标实体时,通常需要将删除操作级联到目标实体。这样的目标实体被视为“孤立实体”,并且“孤立移除”属性可用于指定应移除孤立实体。例如,如果订单有多个行项目,并且其中一个已从订单中删除,则删除的行项目将被视为孤立项。如果将删除设置为true,则从订单中删除行项目时将删除行项目实体

您可能还想看看下面的问题,以便在进一步满足您的需求时提出这个问题


您将不得不在服务/DAO级别处理此问题,我认为您不会发现任何JPA对此特定用例的支持。只需在删除父项/子项之前手动检查条件

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval=true)
Set<Child> childs;