Предположим, что объект Person
имеет поле List<Address> listOfAddresses
, которое либо @ManyToMany
, либо @OneToMany
отношение к объекту Address
. Если я удалю Address
с em.remove("James's_address")
, обновится ли listOfAddresses
для удаления "James's_address"
?Удаляет ли объект автоматически обновляет свои отношения?
ответ
Это зависит.
Если у вас есть OneToMany, а таблица адресов имеет внешний ключ для человека, удаление адреса будет работать. Если пользователь и его адреса были загружены в сеанс до удаления адреса, его список адресов будет содержать удаленный адрес. Вы должны сами поддерживать все ассоциации. Если адреса пользователя еще не загружены, когда они будут загружены, список не будет содержать удаленный адрес, очевидно, поскольку Hibernate не найдет его в базе данных.
Если OneToMany использует таблицу соединений, или если это ManyToMany, то удаление адреса без его удаления из списка адресов всех лиц, ссылающихся на него, приведет к исключению, так как таблица соединений будет продолжать ссылаться адрес, который вы хотите удалить. Ограничение внешнего ключа - это то, что вызовет исключение.