Ответ 1
Синтаксис вашего запроса 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 для привязки именованных параметров запроса