Гибернация отношения многие ко многим и каскадное удаление - PullRequest
2 голосов
/ 13 апреля 2011

Используя 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 ]

3 голосов
/ 13 апреля 2011

Нет, это невозможно. Hibernate не предоставляет функцию удаления потерянных для отношений «многие ко многим».

1 голос
/ 13 апреля 2011

Почему вы хотите это сделать?Вы можете удалить любую из сущностей (Персона или Адрес), и Hibernate обеспечит согласованность на основе определенной вами аннотации.

В этом случае удаление ссылок между различными таблицами вручную является ненужным риском.

0 голосов
/ 13 апреля 2011

org.hibernate.annotations.CascadeType.DELETE_ORPHAN можно использовать для удаления сирот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...