Как мне сделать JPQL SubQuery? - PullRequest
       15

Как мне сделать JPQL SubQuery?

21 голосов
/ 02 сентября 2010

Можно ли сделать эквивалент этого SQL-запроса в 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'
) 

1 Ответ

33 голосов
/ 02 сентября 2010

Вам необходимо проверить его с помощью IN и подзапроса , так как оба работают в JPQL (согласно синтаксической справке они работают вместе).Вы также можете посмотреть на MEMBER OF выражений .

Но, на мой взгляд, есть более лучший подход.Такие запросы называются коррелированными подзапросами, и их всегда можно переписать, используя EXISTS:

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

JPQL поддерживает EXISTS с подзапросами .

...