2010-09-02 94 views
14

可以在JPQL中做这个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' 
) 

回答

26

您需要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