Синтаксис вашего запроса JPQL неверен. Либо использовать (с позиционным параметром):
List<Long> ids = Arrays.asList(380L, 382L, 386L);
Query query = em.createQuery("FROM TrackedItem item WHERE item.id IN (?1)");
query.setParameterList(1, ids)
List<TrackedItem> items = query.getResultList();
Или (с именованным параметром):
List<Long> ids = Arrays.asList(380L, 382L, 386L);
Query query = em.createQuery("FROM TrackedItem item WHERE item.id IN :ids");
query.setParameterList("ids", ids)
List<TrackedItem> items = query.getResultList();
Ниже приведены соответствующие разделы спецификации JPA 1.0 о параметрах:
4.6.4.1 Позиционные параметры
Следующие правила применяются к позиционным параметрам.
- Входные параметры обозначаются префиксом вопросительного знака (?), За которым следует целое число. Например:
?1
.
- Входные параметры нумеруются, начиная с 1.
Обратите внимание, что один и тот же параметр может использоваться более одного раза в строке запроса и что порядок использования параметров в строке запроса не должен соответствовать порядку позиционных параметров.
4.6.4.2 Именованные параметры
Именованный параметр - это идентификатор, перед которым стоит символ «:». Он следует правилам для идентификаторов, определенных в разделе 4.4.1. Именованные параметры чувствительны к регистру.
Пример: * * тысяча двадцать-восемь
SELECT c
FROM Customer c
WHERE c.status = :stat
Раздел 3.6.1 описывает API для привязки именованных параметров запроса