我如何做一个JPQL SubQuery?

时间:2010-09-02 16:45:58

标签: java orm jpa jpql

可以在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'
) 

1 个答案:

答案 0 :(得分:33)

您需要使用INsubquery对其进行测试,因为两者都可以在JPQL中工作(根据它们一起工作的语法参考)。您也可以查看MEMBER OF expressions

但我认为有更好的方法。这样的查询称为相关子查询,并且总是可以使用EXISTS重写它们:

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

JPQL支持EXISTS with subqueries