В запросе JPA, как передать список для использования в качестве таблицы с одним столбцом? - PullRequest
0 голосов
/ 09 октября 2018

У меня есть список идентификаторов, и мне нужен запрос, чтобы вернуть только те, которые не существуют в указанной таблице.Я знаю, что в SQL вы можете сделать это следующим образом:

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

(Из этого ответа: Ссылка )

Но я пытаюсь использовать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 [...], который кажется двоеточием в первом случае или открытыми скобками во втором.

Что мне делать вместо этого?

1 Ответ

0 голосов
/ 10 октября 2018

Запросы JPA не допускают подзапросов вне предложений WHERE или HAVING.Подзапрос в этом случае - (VALUES :ids), поскольку он создает таблицу, которую может использовать остальная часть запроса.Если бы он мог быть реорганизован, чтобы иметь подзапрос в предложении WHERE, проблема могла бы быть решена таким образом.Однако настройка nativeQuery = true была самым простым решением для моего случая, потому что мне не нужны были какие-то специфические для JPA функции, такие как FETCH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...