Как удалить сущность с отношением 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 () для каждого пользователя из группы, чтобы иметь возможность удалить эту группу.

Ответы на вопрос(8)

Ваш ответ на вопрос