Est-il possible de faire l'équivalent de cette requête sql en 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'
)
Vous devez le tester avec DANS et sous-requête car les deux fonctionnent en JPQL (selon la référence de la syntaxe, ils fonctionnent ensemble). Vous pouvez également consulter expressions MEMBER OF .
Mais il y a une meilleure approche à mon avis. De telles requêtes sont appelées sous-requêtes corrélées et on peut toujours les réécrire en utilisant EXISTS:
SELECT * FROM COUNTRIES c WHERE
EXISTS (
SELECT 'found' FROM PORTS p
WHERE p.COUNTRY_ID = c.COUNTRY_ID AND STATE = 'A'
)
JPQL prend en charge EXISTE avec des sous-requêtes .