【问题标题】:JPA @namedQuery with "IN" expression带有“IN”表达式的 JPA @namedQuery
【发布时间】:2013-08-16 05:28:41
【问题描述】:

我有以下命名查询:

@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]

任何想法为什么?

【问题讨论】:

标签: java hibernate jpa named-query


【解决方案1】:

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);

【讨论】:

    【解决方案2】:

    Department 中的列 idjava.lang.Long 类型,而在您的 setParameter 中,您试图设置 String [1,2,3] 这就是为什么您会看到 java.lang.IllegalArgumentException,正确的实现方法是@Kevin 建议创建 Long 类型的 List 并添加您的参数。

    【讨论】:

      猜你喜欢
      • 2015-04-04
      • 2015-05-18
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 2021-01-09
      • 1970-01-01
      • 2019-02-16
      相关资源
      最近更新 更多