2015-11-05 43 views
1

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

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

class B { 
    @ManyToOne 
    private as 

} 

class C { 
    @ManyToOne 
    private as 
} 
... 
+0

“美丽”是在编程相当困难的任期。你想实现什么?也许你最好在[codereview @ Stackexchange](http://codereview.stackexchange.com) – jkalden

+0

询问。也许干净或最不容易出错将比美丽更好。您可以考虑使用SQL查询删除所有其他可能引用的对象的解决方案,但该解决方案很难扩展 – PKuhn

+0

尽管如此,SO的工作方式却有所不同。尝试在codereview ... – jkalden

回答

1

首先,我不认为这是将商业方法放在实体类中的“美丽”解决方案。

我会建议为你的类创建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); 
    } 
}