Diciamo che ho due entità: Gruppo e Utente. Ogni utente può essere membro di molti gruppi e ogni gruppo può avere molti utenti.
@Entity
public class User {
@ManyToMany
Set<Group> groups;
//...
}
@Entity
public class Group {
@ManyToMany(mappedBy="groups")
Set<User> users;
//...
}
Ora voglio rimuovere un gruppo (diciamo che ha molti membri).
Il problema è che quando chiamo EntityManager.remove () su alcuni gruppi, il provider JPA (nel mio caso Hibernate) non rimuove le righe dalla tabella di join e l'operazione di eliminazione non riesce a causa di vincoli di chiave esterna. La chiamata di remove () sull'utente funziona bene (immagino che abbia qualcosa a che fare con il lato proprietario della relazione).
Quindi come posso rimuovere un gruppo in questo caso?
L'unico modo che ho potuto ottenere è caricare tutti gli utenti nel gruppo, quindi per ogni utente rimuovere il gruppo corrente dai suoi gruppi e aggiornare l'utente. Ma mi sembra ridicolo chiamare update () su ogni utente del gruppo solo per poter eliminare questo gruppo.