Digamos que eu tenha duas entidades: Grupo e Usuário. Cada usuário pode ser membro de muitos grupos e cada grupo pode ter muitos usuários.
@Entity
public class User {
@ManyToMany
Set<Group> groups;
//...
}
@Entity
public class Group {
@ManyToMany(mappedBy="groups")
Set<User> users;
//...
}
Agora, quero remover um grupo (digamos que ele tenha muitos membros).
O problema é que quando eu chamo EntityManager.remove () em algum Grupo, o provedor JPA (no meu caso Hibernate) não remove linhas da tabela de junção e a operação de exclusão falha devido a restrições de chave estrangeira. Chamar remove () em User funciona bem (acho que isso tem algo a ver com o lado proprietário do relacionamento).
Então, como posso remover um grupo neste caso?
A única maneira que eu poderia inventar é carregar todos os usuários no grupo, então para cada usuário remover o grupo atual de seus grupos e atualizar o usuário. Mas me parece ridículo chamar update () em cada usuário do grupo apenas para poder deletar este grupo.