JPA @namedQuery с выражением "IN"
У меня есть следующее namedQuery:
@NamedQuery(name = Department.getDepartmentsByIds, query = "SELECT tbl FROM Department tbl where tbl.id in (:departmentsIds)")
Я хотел бы передать параметр:partmentsIds = "1,2,3" следующим образом:
query.setParameter("departmentsIds","1,2,3");
но я получаю ошибку:
java.lang.IllegalArgumentException: Parameter value [1,2,3] was not matching type [java.lang.Long]
есть идеи почему?
2 ответа
Решение
Пройти List
к setParameter
метод вместо String
, Аргумент общего типа List
должен соответствовать типу вашего departmentIds
поле.
List<Integer> ids = new ArrayList<Integer>(); //this should be your id column's type
ids.add(1);
ids.add(2);
ids.add(3);
query.setParameter("departmentsIds",ids);
Колонка id
в Department
имеет тип java.lang.Long
и в вашем setParameter
вы пытаетесь установить String
[1,2,3]
вот почему вы видите java.lang.IllegalArgumentException
Правильный способ реализации как @Kevin предложил создать List
из Long
введите и добавьте свои аргументы.