Left Join JPQL(HQL)

6 respostas
D

Olá pessoal,

estou apanhando do JPA com Hibernate. Montei o seguinte JPQL/HQL:

select a, b from EntidadeA a left join a.listaEntidadeB b where b.pk.entidadeC.codigo = 1

Ele roda perfeitamente, porém só me traz as “EntidadeA” que estão relacionadas com as “EntidadeB” que atendem a cláusula “WHERE”. Eu gostaria que ele me retornasse todas as “EntidadeA” do sistema independentemente de ter uma “EntidadeB” ou não. Tipo… me traz a “EntidadeA” no primeiro campo do JPQL e caso não tenha uma “EntidadeB” que atenda a cláusula “WHERE”, traga “null”.

Alguém sabe como fazer isto?

Desde já agradeço.

6 Respostas

G

Não entendi o teu select. Voce quer usar um atributo da entidade b na clausula where e quer que o select retorne todos os atributos mesmo os que não tem vínculo? Eu não sei se pra mais alguém soou assim, mas tá meio estranho isso!

E

dmarcosm:
Olá pessoal,
estou apanhando do JPA com Hibernate. Montei o seguinte JPQL/HQL:

select a, b from EntidadeA a left join a.listaEntidadeB b where b.pk.entidadeC.codigo = 1

Ele roda perfeitamente, porém só me traz as “EntidadeA” que estão relacionadas com as “EntidadeB” que atendem a cláusula “WHERE”. Eu gostaria que ele me retornasse todas as “EntidadeA” do sistema independentemente de ter uma “EntidadeB” ou não. Tipo… me traz a “EntidadeA” no primeiro campo do JPQL e caso não tenha uma “EntidadeB” que atenda a cláusula “WHERE”, traga “null”.

Alguém sabe como fazer isto?

Desde já agradeço.

Cara eu faço selects com left outer join para o informix, faço da seguinte forma:
Acho que o que esta errado no seu caso é justamente usar a clausula where para fazer o left outer join tem que usa a clausula on

select campos from tstsls953300 d left outer join tstsls971300 f
on f.t_year_o=d.t_year_o

não sei se te ajudei… mais é assim que faço… até mais

G

Pelo que entendi ele está falando de hql. Em hql não é necessário explicitar a clausula “on”. Pelo que vi o problema está na consição do “select”, o “where”.

D

E ai pessoal. Beleza?

dei uma estudada aqui e percebi que o que estava faltando uma parte do codigo do HQL. Ao invés deste HQL

select a, b from EntidadeA a left join a.listaEntidadeB b where b.pk.entidadeC.codigo = 1

Para funcionar precisaria estar assim

select a, b from EntidadeA a left join a.listaEntidadeB b where b.pk.entidadeC.codigo = 1 or b.pk.entidadeC.codigo is null

Até agora não entendi muito bem o porquê mas está funcionando heheheh

Muito obrigado pela ajuda de todos. Até.

jaumzera

O ideal seria você entender o funcionamento das cláusulas join combinadas: inner, outer, left, etc.
A documentação do PostgreSQL (www.postgresql.org) tem bastante coisa útil, caberá você, depois, empregá-los em JPQL.

M

O correto em HQL é:

select a, b from EntidadeA a left join a.listaEntidadeB b with b.pk.entidadeC.codigo = 1

OBS: Veja que se deve utilizar o “WITH” e não o “WHERE” (senão você restringe a consulta)

Criado 6 de setembro de 2007
Ultima resposta 27 de out. de 2010
Respostas 6
Participantes 5