Olá, pessoal, tudo bem?
Meu problema é simples, mas ainda não consegui enxergar uma solução, tenho esta query abaixo e preciso transformá-la em JPQL:
SELECT
atendimento.DATA_COLETA,
atendimento.NUM_ORDEM,
receptor.NOME_RECEPTOR,
receptor.NOME_HOSPITAL,
receptor.NUM_DOACAO as NUM_DOACAO_RECEPTOR,
receptor.TIPO_HEMO,
receptor.TIPO_SANGUINEO,
receptor.RH,
receptor.VOLUME,
doador.NUM_DOACAO as NUM_DOACAO_DOADOR
FROM agets.atendimento atendimento
LEFT OUTER JOIN
agets.receptor receptor on receptor.ID_RECEPTOR = atendimento.ID_ATENDIMENTO
RIGHT OUTER JOIN
agets.doador doador on doador.ID_DOADOR = atendimento.ID_ATENDIMENTO;
Tentei isso, porém, na consulta acima “filtrava” os valores de modo a não repetir os dados, já que basicamente se trata de um relacionamento ManyToMany, o que não consegui na consulta que fiz abaixo.
[code]public List<Atendimento> listarTodosOrdenadosPelasMaisAntigos() {
Query consulta = session.createQuery("Select a from Atendimento a left outer join a.doadores right outer join a.receptores ");
return consulta.list();
}[/code]
Creio que a minha maior dificuldade seja nesta parte, onde posso distinguir a consulta:
FROM agets.atendimento atendimento
LEFT OUTER JOIN
agets.receptor receptor on receptor.ID_RECEPTOR = atendimento.ID_ATENDIMENTO
RIGHT OUTER JOIN
agets.doador doador on doador.ID_DOADOR = atendimento.ID_ATENDIMENTO;
Não se se entendi direito a sua dúvida, mas se for o que eu estou pensando o DISTINCT(object) resolve.
Observe o código modificado abaixo:
public List<Atendimento> listarTodosOrdenadosPelasMaisAntigos() {
Query consulta = session.createQuery("Select DISTINCT(a) from Atendimento a left outer join a.doadores right outer join a.receptores ");
return consulta.list();
}
Boa tarde, Danilo, tudo bem?
Bem, o distinct até seria muito interessante, mas neste caso, já tinha testado ele anteriormente.
Ele traz mesmo assim dados repetidos, não resolveu o problema…
Penso eu que a idéia ia ser a seguinte:
Selecionar os campos de atendimento e de receptor, juntamente com doadores, tudo bem consigo fazer os dois normalmente.
Porém, ao tentar obter seus valores respectivos tenho registros duplicados, pela razão do relacionamento:
A idéia é que ao fazer uma doação, possa ter um ou mais receptores, porém vários doadores. como é ManyToMany, há registros duplicados, e distinct não resolveu.
o que acontece é que devo obter os dados através dos campos onde se relacionam para que não haja redundância, ou seja, fazer um join levando em consideração onde os ID’s de atendimento , doadores e receptores se relacionam.
Muito obrigado pela sua dica até aqui.
Se precisar de mais código pode falar.