Можно ли выполнить эквивалент этого 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
Вам нужно протестировать его с помощью IN и подзапрос, поскольку оба они работают в JPQL (согласно синтаксической ссылке они работают вместе). Вы также можете посмотреть MEMBER OF expression.
Но, на мой взгляд, есть лучший подход. Такие запросы называются коррелированными подзапросами, и их всегда можно переписать с помощью EXISTS:
SELECT * FROM COUNTRIES c WHERE
EXISTS (
SELECT 'found' FROM PORTS p
WHERE p.COUNTRY_ID = c.COUNTRY_ID AND STATE = 'A'
)