jpa 如何执行JPQL子查询?

hyrbngr7  于 2022-11-14  发布在  其他
关注(0)|答案(2)|浏览(229)

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

njthzxwz1#

你需要用IN和subquery来测试它,因为它们都可以在JPQL中工作(根据语法参考,它们可以一起工作)。
但我认为有一种更好的方法,这种查询称为相关子查询,可以使用EXISTS重写它们:

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

JPQL支持带有子查询的EXISTS。

0x6upsns

0x6upsns2#

是的,在JPQL中可以使用subqueryIN运算符。我有一个类似的用例,它对我很有效。我的查询如下。

@Query("SELECT g FROM Group g WHERE g.id IN (SELECT DISTINCT m.groupId FROM Member m WHERE m.id IN (?1))")
List<Group> findAllGroupsOfMembers(List<BigInteger> memberIds);

相关问题