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