【问题标题】:Pass a list as a parameter to JPQL named query not working [duplicate]将列表作为参数传递给 JPQL 命名查询不起作用 [重复]
【发布时间】:2015-11-07 09:26:38
【问题描述】:

我有一个这样声明的 JPQL 命名查询:

@NamedQuery(name = "Client.findByInternalIds", query =
     "select o from Client o where o.internalId in (:internalIds)")

这里,:internalIds 应该是我在运行时作为参数传递给命名查询的列表。每当我尝试这样做时都会出现问题:

@Override
public List<Client> getClientsByInternalIds(List<Integer> internalIds) {
    TypedQuery<Client> nq = em.createNamedQuery("Client.findByInternalIds", Client.class);
    nq.setParameter("internalIds", internalIds);
    return nq.getResultList();
}

我基本上得到了这个错误(异常)

java.lang.IllegalArgumentException:您试图设置类 java.util.ArrayList 类型的值 对于具有预期类类型的参数 internalIds java.lang.Integer from query string select o from Client o where o.internalId in (:internalIds)

我在互联网上搜索了一个解决方案,似乎都说我的语法是正确的,所以任何人都可以帮我解决这个问题吗?谢谢。

仅供参考,使用 WebLogic 12c 和 EclipseLink。

【问题讨论】:

    标签: java jpa eclipselink jpql weblogic12c


    【解决方案1】:

    实际上我的语法不对,经过多次尝试,简单的解决方案是删除@NamedQuery定义中internalIds参数上的括号。

    所以@NamedQuery 变成了这样:

    @NamedQuery(name = "Client.findByInternalIds", query =
         "select o from Client o where o.internalId in :internalIds")
    

    而且它有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      • 2023-03-06
      • 2021-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多