Jpa删除可选父级,具有多个对一个关系

时间:2015-11-05 11:32:21

标签: java jpa orm

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

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

class B {
    @ManyToOne
    private as

}

class C {
    @ManyToOne
    private as
}
...

1 个答案:

答案 0 :(得分:1)

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

我建议您为A类创建DAO对象,并将CascadeType设置为REMOVE的双向关系:

@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);
  }
}