Como faço uma subconsulta JPQL?
Pergunta
É possível fazer o equivalente a essa consulta SQL no JPQL?
SELECT *
FROM COUNTRIES c WHERE COUNTRY_ID IN (
SELECT DISTINCT COUNTRY_ID
FROM PORTS p
WHERE p.COUNTRY_ID = c.COUNTRY_ID AND STATE = 'A'
)
Solução
Você precisa testá -lo com DENTRO e subconsiva Como ambos trabalham no JPQL (de acordo com a referência de sintaxe, eles trabalham juntos). Você também pode olhar para Membro de expressões.
Mas há uma abordagem melhor na minha opinião. Tais consultas são chamadas de sub-questões correlacionadas e sempre se pode reescrevê-las usando: existe:
SELECT * FROM COUNTRIES c WHERE
EXISTS (
SELECT 'found' FROM PORTS p
WHERE p.COUNTRY_ID = c.COUNTRY_ID AND STATE = 'A'
)
Suportes JPQL Existe com subconsas.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow