带有“IN”表达式的JPA @namedQuery

时间:2013-08-14 10:03:37

标签: java hibernate jpa named-query

我有以下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]

任何想法为什么?

2 个答案:

答案 0 :(得分:6)

List传递给setParameter方法,而不是StringList的泛型类型参数应与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}}类型并添加您的参数。