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 введите и добавьте свои аргументы.

Другие вопросы по тегам