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'
)
可以在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'
)
您需要IN和subquery因为这两个测试它在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。