是否可以在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' )
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。
0x6upsns2#
是的,在JPQL中可以使用subquery和IN运算符。我有一个类似的用例,它对我很有效。我的查询如下。
subquery
IN
@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);
2条答案
按热度按时间njthzxwz1#
你需要用IN和subquery来测试它,因为它们都可以在JPQL中工作(根据语法参考,它们可以一起工作)。
但我认为有一种更好的方法,这种查询称为相关子查询,可以使用EXISTS重写它们:
JPQL支持带有子查询的EXISTS。
0x6upsns2#
是的,在JPQL中可以使用
subquery
和IN
运算符。我有一个类似的用例,它对我很有效。我的查询如下。