4

我有以下命名查询:

@NamedQuery(name = Department.getDepartmentsByIds, query = "SELECT tbl FROM Department tbl where tbl.id in (:departmentsIds)") 

我想像这样传递参数:departmentsIds = "1,2,3":

query.setParameter("departmentsIds","1,2,3");

但我得到一个错误:

java.lang.IllegalArgumentException: Parameter value [1,2,3] was not matching type [java.lang.Long]

任何想法为什么?

4

2 回答 2

6

将 a 传递ListsetParameter方法而不是 a 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);
于 2013-08-14T10:07:32.043 回答
0

中的列idDepartment类型的java.lang.Long,在你setParameter试图设置String [1,2,3]这就是你看到java.lang.IllegalArgumentException的原因,正确的实现方法是@Kevin 建议创建一个List类型Long并添加你的参数。

于 2013-08-14T10:19:04.553 回答