Olá pessoal, tudo bem?
Observem a query abaixo:
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;
O objetivo é transformá-la em JPQL de modo a listar com base no relacionamento já existente na classe Atendimento:
[code] @ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@JoinTable(name = “doador_atendimento”, joinColumns = { @JoinColumn(name = “ID_ATENDIMENTO”) }, inverseJoinColumns = { @JoinColumn(name = “ID_DOADOR”) })
private List<Doador> doadores = new ArrayList<Doador>();
@ManyToMany(cascade = CascadeType.MERGE, fetch = FetchType.LAZY)
@JoinTable(name = "receptor_atendimento", joinColumns = { @JoinColumn(name = "ID_ATENDIMENTO") }, inverseJoinColumns = { @JoinColumn(name = "ID_RECEPTOR") })
private List<Receptor> receptores = new ArrayList<Receptor>();
[/code]
Consegui fazer isso, sem sucesso. Exibiu 1 registro apenas, onde deveriam existir 2, como se ignorasse parte do relacionamento:
"select a from Atendimento a" +
" left outer join fetch a.receptores receptores" +
" right outer join a.doadores doadores" +
" where a.id = receptores.id and a.id = doadores.id"
A idéia é que onde possam existir pontos onde os relacionamentos se unem possa listar sem que os dados possam se repetir, como um distinct, porém algo mais “interno” do que isso.
Agradeço a todos que se disponibilizarem.