Olá pessoal
O problema é o seguinte:
Tenho duas tabelas do tipo
Usuario:
id_usuario
nome_usuario
Grupo:
id_grupo
nome_grupo
Um usuário pode fazer parte de vários grupos e um grupo pode ter vários usuários, ou seja ManyToMany
Portanto tenho uma tabela intermediária
Usuario_Grupo
id_usuario_grupo
id_usuario
id_grupo
Até aí está funcionando. Tenho as entidades mapeadas e inserindo normalmente. Se necessito deletar alguem da entidade Usuario ele deleta da entidade UsuarioGrupo e se eu preciso deletar um grupo ele deleta também do UsuarioGrupo.
O que ocorre é o seguinte. Eu quero deletar objetos da entidade UsuarioGrupo. Isto eu consigo mas gostaria de fazer em lote como o SQL faz. No SQL (Mysql) eu faria assim:
DELETE FROM usuario_grupo WHERE id_usuario = 45;
Ocorre que a entidade mapeada não tem id_usuario como inteiro e sim como um atributo do tipo Usuario
Tentei fazer assim em JPA
DELETE FROM UsuarioGrupo ug WHERE ug.usuario.idUsuario = 45
Normalmente se necessido fazer isso no select não tem problema pois a entidade UsuarioGrupo guarda a referencia a entidade Usuario e não o id_usuario. Internamente o hibernate faz isso.
O problema é que o JPA não deleta se usar inner join ( ug.usuario.idUsuario).
tentei enganar fazendo algo como
DELETE FROM UsuarioGrupo ug WHERE ug.idUsuarioGrupo IN (SELECT ug.idUsuarioGrupo FROM UsuarioGrupo ug WHERE ug.usuario.idUsuario = 45 )
Mas isso parece não funcionar nem no SQL.
Não estou querendo fazer uma consulta, jogar uma lista e ir iterando e deletando objeto por objeto.
Alguém tem uma luz?