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 kiedy wywołuję EntityManager.remove () na jakiejś grupie, dostawca JPA (w moim przypadku Hibernate) nie usuwa wierszy z tabeli łączenia, a operacja usuwania nie udaje się z powodu ograniczeń klucza obcego. Wywołanie funkcji remove () na User działa dobrze (przypuszczam, że ma to coś wspólnego z posiadaniem strony relacji).
Jak więc mogę usunąć grupę w tym przypadku?
Jedynym sposobem, 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 ze swoich grup i zaktualizowanie użytkownika. Ale wydaje mi się absurdalne wywoływanie funkcji update () na każdym użytkowniku z grupy tylko po to, aby móc usunąć tę grupę.