ti-enxame.com

Como eu faço uma subconsulta JPQL?

É 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'
) 
22
ErVeY

Você precisa testá-lo com EM e subconsulta , pois ambos funcionam no JPQL (de acordo com a referência de sintaxe, eles trabalham juntos). Você também pode olhar para expressões MEMBER OF .

Mas há uma abordagem melhor na minha opinião. Essas consultas são chamadas subconsultas correlacionadas e sempre é possível reescrevê-las usando EXISTS:

SELECT * FROM COUNTRIES c WHERE 
EXISTS (
        SELECT 'found' FROM PORTS p 
        WHERE p.COUNTRY_ID = c.COUNTRY_ID AND STATE = 'A'
) 

O JPQL suporta EXISTA com subconsultas .

34
topchef