Будет ли удаление объекта автоматически обновлять их отношения? - PullRequest
1 голос
/ 31 декабря 2011

Предположим, что у сущности Person есть поле List<Address> listOfAddresses, которое либо @ManyToMany, либо @OneToMany связано с сущностью Address. Если я удалю Address с em.remove("James's_address"), будет ли listOfAddresses автоматически обновляться для удаления "James's_address"?

1 Ответ

3 голосов
/ 31 декабря 2011

Это зависит.

Если у вас есть OneToMany, а в таблице адресов есть внешний ключ для этого человека, удаление адреса будет работать. Если человек и его адреса были загружены в сеанс до удаления адреса, его список адресов все равно будет содержать удаленный адрес. Вы должны поддерживать все ассоциации самостоятельно. Если адреса этого человека еще не были загружены, то при загрузке список, очевидно, не будет содержать удаленный адрес, поскольку Hibernate не найдет его в базе данных.

Если OneToMany использует таблицу соединения или это ManyToMany, то удаление адреса без удаления его из списка адресов всех лиц, на которые он ссылается, приведет к исключению, поскольку таблица соединения будет продолжать ссылаться на адрес, который вы хотите удалить. Ограничение внешнего ключа является причиной исключения.

...