Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida com query Many to Many

Bom dia

Tenho as seguintes entidades: Caso, Parte Pessoa onde caso tem um relacionamento muitos para muitos com parte e parte tem um relacionamento muitos para um com pessoa, ou seja um caso pode ter várias partes e cada parte tem uma pessoa. Eu desejo realizar um select que me traga todos os casos que determinada pessoa seja parte, mas que no caso retornado também venham carregadas todas as partes desse caso, para isso tentei a query com JPQL:

select distinct  c from Caso c left join c.partes pa join pa.pessoa p where p.nome like :param

A querie funciona, traz apenas os casos onde o parâmetro informado participa sendo requerente ou requerido, mas traz apenas uma parte, que é a parte que foi passada como parâmetro, eu precisaria desses casos desta pessoa, mas também com as outras partes carregadas e devido a quantidade de dados que existem no caso, deixar para carregar por open entity manager in view não é uma opção, alguma sugestão?

2 respostas
solução!

Olá rjpereira,

a Pessoa conhece as suas Partes ? E a Parte conhece os Casos? Se sim, de bate pronto uma coisa que eu faria seria filtrar o caso da pessoa via subquery.

Basicamente numa subquery eu faria a consulta de todos os casos desta pessoa e na query principal eu apenas verificaria se o caso com todas as suas partes está dentro da lista de casos daquela pessoa pego pela subquery.

é uma boa saída, eu resolvi adicionando um join adicional:

select distinct c from Caso c left join fetch c.partes p0 join fetch p0.pessoa pe_0   left join c.partes pa2  where pa2.pessoa.nome like :param

como descrito aqui: https://qualidadegarantida.blogspot.com/2014/04/cuidado-ao-realizar-consultas-com-join.html