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。