Hibernate多对多关系和级联删除

时间:2011-04-13 14:46:26

标签: java hibernate

使用Hibernate,我有以下类:

public class Person {

    @ManyToMany(fetch=FetchType.LAZY)
    @Cascade(CascadeType.ALL)
    @JoinTable(name = "person_address", joinColumns = { @JoinColumn(name = "person_id") },
                                        inverseJoinColumns = { @JoinColumn(name = "address_id") })

    public List<Address> getAddresses() {
        return addresses;
    }
}

public class Address {
    ...
    @ManyToMany(mappedBy="addresses", fetch=FetchType.LAZY)
    @Cascade(CascadeType.ALL)
    public List<Person> getPersons() {
        return persons;
    }
}

我的问题是: 是否有可能删除Address和Person之间关系的元素,Address的“孤儿”元素也被删除。换句话说,我不想拥有与人无关的地址。

谢谢, 马克。

3 个答案:

答案 0 :(得分:3)

不,这是不可能的。 Hibernate不为多对多关系提供孤立删除功能。

答案 1 :(得分:1)

你为什么要这样做?您可以删除任何实体(人员或地址),Hibernate将根据您定义的注释确保一致性。

在这种情况下,手动删除不同表之间的链接是不必要的风险。

答案 2 :(得分:0)

org.hibernate.annotations.CascadeType.DELETE_ORPHAN可用于删除孤儿。