我如何做一个JPQL SubQuery?

有可能在JPQL中执行此sql查询的等效操作吗?

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' ) 

您需要使用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 。