Java Jpa使用可选多对一关系删除可选父级

Java Jpa使用可选多对一关系删除可选父级,java,jpa,orm,Java,Jpa,Orm,我有一个类,它可以被多对一或一对一关系中的许多不同类引用,或者没有引用对象。删除此类的元素时,指向该元素的对象也应删除。实现这种行为的最美丽的方式是什么 class A { public remove() { // remove the element which is pointing to me } } class B { @ManyToOne private as } class C { @ManyToOne priv

我有一个类,它可以被多对一或一对一关系中的许多不同类引用,或者没有引用对象。删除此类的元素时,指向该元素的对象也应删除。实现这种行为的最美丽的方式是什么

class A {
    public remove() {
        // remove the element which is pointing to me 
    }
}

class B {
    @ManyToOne
    private as

}

class C {
    @ManyToOne
    private as
}
...

首先,我不认为将业务方法放在实体类中是一个“漂亮”的解决方案

我建议为您的A类创建DAO对象,并使您的关系与CascadeType设置为双向,以删除:

@Entity
class A {
    @OneToMany(mappedBy = "parentB", cascade = CascadeType.REMOVE)
    private Set<Child> childrenB;

    @OneToMany(mappedBy = "parentC", cascade = CascadeType.REMOVE)
    private Set<Child> childrenC;
}

@Stateless
class daoA {
  @PersistenceContext
  EntityManager em;

  public void remove(A a){
    em.delete(a);
  }
}
@实体
甲级{
@OneToMany(mappedBy=“parentB”,cascade=CascadeType.REMOVE)
私人儿童b;
@OneToMany(mappedBy=“parentC”,cascade=CascadeType.REMOVE)
私设儿童;
}
@无国籍
daoA类{
@持久上下文
实体管理器;
公共空间移除(A){
em.删除(a);
}
}

“美丽”在编程中是一个相当困难的术语。你想要实现什么?也许你最好问清楚,也许干净或者最不容易出错会比漂亮好。您可以考虑使用SQL查询删除所有其他可能引用对象的解决方案,但此解决方案很难扩展,因此工作方式不同。在codereview中尝试。。。