我有以下namedQuery:
@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]
任何想法为什么?
答案 0 :(得分:6)
将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);
答案 1 :(得分:0)
id
中的Department
列属于java.lang.Long
类型,而setParameter
中的String
列[1,2,3]
java.lang.IllegalArgumentException
这就是您的原因请参阅List
,正确的实现方法是@Kevin建议创建一个Long
{{1}}类型并添加您的参数。