繁体   English   中英

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

[英]Make 2 different Parent Entities reference a Child Entity through @OneToMany in JPA

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

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

我想做的是,在Parent1和Child之间有@OneToMany关系,在Parent2和Child之间有另一个@OneToMany关系。

原因是如果删除Parent1,我希望删除Childs;如果删除Parent2,则删除Childs。

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

TL; DR :应删除没有Parent1和Parent2的任何Child。

这是我的代码(省略@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;
}

谢谢,

阅读OneToMany.ophanRemoval ,你可以试试这个:

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

祝好运!

是的,根据@jmvivo的回答你需要使用orphanRemoval = true是你的用例的解决方案,这里按照Oracle在这个链接

当从关系中移除一对一或一对多关系中的目标实体时,通常希望将移除操作级联到目标实体。 此类目标实体被视为“孤儿”,orphanRemoval属性可用于指定应删除孤立实体。 例如,如果订单包含多个订单项,并且其中一个订单项已从订单中删除,则已删除的订单项会被视为孤儿。 如果将orphanRemoval设置为true,则在从订单中删除订单项时,系统商品实体将被删除。

您可能还希望在进一步了解您的要求时查看下面的SO问题

一对多关系JPA / Hibernate删除链接

JPA 2.0 orphanRemoval = true删除Cascade时的VS.

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM