JPA - Como passar condição adicional no join

8 respostas
Masami

Minha duvida é como converter a seguinte consulta para CriteriaQuery e/ou JPQL:

SELECT *
FROM Servicos
LEFT JOIN ServicosADesconsiderar 
   ON Servicos.protocolo=ServicosADesconsiderar.protocolo AND ServicosADesconsiderar.indicador=1

Como passar esse “AND ServicosADesconsiderar.indicador=1” junto no join???

8 Respostas

Rodrigo_Sasaki

O AND é igual no JPQL, não vai mudar nada.

a diferença é que ao invés do nome da coluna, você vai usar o nome do atributo da classe

Masami

Rodrigo Sasaki:
O AND é igual no JPQL, não vai mudar nada.

a diferença é que ao invés do nome da coluna, você vai usar o nome do atributo da classe

Como assim?

tentei desta forma e não deu certo:

SELECT s  FROM Servicos  s
JOIN s.servicosADesconsiderar sad AND sad.indicador=1

Obs. lembrando que preciso passar o AND no JOIN, não posso passar no WHERE porque não vai retornar a mesma consulta.

Rodrigo_Sasaki

Ah tá, me desculpe. Agora eu entendi.

O JPA 2.0 não suporta a clausula ON, se não me engano. Então você vai ter que filtar no WHERE o que quiser selecionar.

Masami

cada vez desanimo mais com esse JPA…

se não for possível, vou ter que fazer da maneira que não queria:

SELECT s  FROM Servicos  s  
LEFT JOIN s.servicosADesconsiderar sad 
WHERE (sad.indicador=1 OR sad.indicador IS NULL)
novato25

tente isso:

SELECT s FROM Servicos s LEFT JOIN s.servicosADesconsiderar sad WITH (sad.indicador=1 OR sad.indicador IS NULL)

Hebert_Coelho

‘ON’ só será suportado na próxima versão do JPA.

novato25
na verdade,

SELECT s  FROM Servicos  s      
LEFT JOIN s.servicosADesconsiderar sad WITH (/* As condições que vc utilizaria no ON*/)
Masami
novato25:
na verdade,

SELECT s  FROM Servicos  s      
LEFT JOIN s.servicosADesconsiderar sad WITH (/* As condições que vc utilizaria no ON*/)

opa! assim funcionou, valeu!

agora vou se acho algo parecido com criteira.

Criado 31 de outubro de 2013
Ultima resposta 31 de out. de 2013
Respostas 8
Participantes 4