Скажем, у меня есть два объекта: Group и User. Каждый пользователь может быть членом многих групп, и каждая группа может иметь много пользователей.
@Entity
public class User {
@ManyToMany
Set<Group> groups;
//...
}
@Entity
public class Group {
@ManyToMany(mappedBy="groups")
Set<User> users;
//...
}
Теперь я хочу удалить группу (допустим, у нее много членов).
Проблема заключается в том, что когда я вызываю EntityManager.remove() в какой-либо группе, поставщик JPA (в моем случае Hibernate) не удаляет строки из таблицы соединений, а операция удаления не выполняется из-за ограничений внешнего ключа. Вызов функции remove() для пользователя работает отлично (я думаю, это имеет отношение к владению стороной отношений).
Итак, как я могу удалить группу в этом случае?
Единственный способ, которым я мог придумать, - загрузить всех пользователей в группу, а затем для каждого пользователя удалить текущую группу из своих групп и обновить пользователя. Но мне кажется смешным вызывать update() для каждого пользователя из группы, чтобы удалить эту группу.