在JPA查询中,如何传入列表以用作单列表?

ioekq8ef  于 2022-12-13  发布在  Spring
关注(0)|答案(2)|浏览(168)

我有一个ID列表,我需要一个查询来只返回那些在指定表中不存在的ID。我知道,在SQL中,可以这样做:

select *
from ( 
   values (4),(5),(6)
) as v(id)
where not exists (select *
   from images i
   where i.id = v.id);

(From这个答案是:(第10页)
但是我尝试使用JPA@Query,并将列表作为参数传递,这似乎并不合适。

SELECT t.id
FROM :ids AS t(id)
WHERE NOT EXISTS
    ([Nested select clause])

List<Long> findIdsMissingFromTable(@Param("ids") List<Long> ids, [...]

我也试过(VALUES :ids),它也不喜欢,并删除了AS,得到了同样的结果。在所有情况下,我得到的QuerySyntaxException: unexpected token: ( near line 1, column 18 [...]在第一种情况下似乎是冒号,在第二种情况下似乎是左括号。
我应该做什么呢?

ds97pgxw

ds97pgxw1#

JPA查询不允许WHERE或HAVING子句之外的子查询。在本例中的子查询是(VALUES :ids),因为它生成了一个表,查询的其余部分可以使用。如果可以重新组织它,使子查询位于WHERE子句中,问题就可以通过这种方式解决。但是,对于我的情况,设置nativeQuery = true是最简单的解决方案,因为我不需要任何特定于JPA的特性,如FETCH。

cmssoen2

cmssoen22#

我尝试使用原生查询和值(:ids)进行传递。它只选取了一个id,而不是列表中所有传递的id。您是否执行了其他步骤来创建查询

相关问题