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”.
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
edurei
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
grustk
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
dmarcosm
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
malvesro
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)