Jak usunąć obiekt za pomocą relacji ManyToMany w JPA (i odpowiednich wierszach tabeli łączenia)?
Powiedzmy, że mam dwie jednostki: Grupę i Użytkownika. Każdy użytkownik może być członkiem wielu grup, a każda grupa może mieć wielu użytkowników.
@Entity
public class User {
@ManyToMany
Set<Group> groups;
//...
}
@Entity
public class Group {
@ManyToMany(mappedBy="groups")
Set<User> users;
//...
}
Teraz chcę usunąć grupę (powiedzmy, że ma wielu członków).
Problem polega na tym, że gdy wywołam EntityManager.remove () w niektórych grupach, dostawca JPA (w moim przypadku Hibernate)nie usuwa wierszy z tabeli łączenia operacja usuwania nie powiedzie się z powodu ograniczeń klucza obcego. Wywołanie metody remove () na użytkowniku działa poprawnie (sądzę, że ma to coś wspólnego z posiadaniem strony relacji).
Jak mogę w tym przypadku usunąć grupę?
Jedynym sposobem, w jaki mogłem wymyślić, jest załadowanie wszystkich użytkowników w grupie, a następnie dla każdego użytkownika usunięcie bieżącej grupy z jego grup i zaktualizowanie użytkownika. Ale wydaje mi się absurdalne wywoływanie update () na każdym użytkowniku z grupy tylko po to, aby móc usunąć tę grupę.