java - 将列表作为参数传递给 JPQL 命名查询不起作用

标签 java jpa eclipselink jpql weblogic12c

我有一个以这种方式声明的 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();
}

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

java.lang.IllegalArgumentException: You have attempted to set a value of type class java.util.ArrayList for parameter internalIds with expected type of class java.lang.Integer from query string select o from Client o where o.internalId in (:internalIds)

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

仅供引用,使用 WebLogic 12c 和 EclipseLink。

最佳答案

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

因此,@NamedQuery 变为:

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

而且它有效!

关于java - 将列表作为参数传递给 JPQL 命名查询不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32004704/

相关文章:

java - EclipseLink 在从 createNativeQuery 获取结果集之前随机触发查找查询

mysql - EclipseLink、JPA、Mysql 关闭自动提交

java - JPA - JTA 事务类型的更改不会持久

Java代码似乎只使用了两个并发线程

java - 尝试自动生成 id 时出现 SQL 异常

java - 通过容器 session 管理在 Java 中使用 POJO RPC 比 JBoss 更简单

java - JPA 事务和触发器/计划作业可能发生冲突

jakarta-ee - JPA 动态持久化单元名称

java.lang.VerifyError : Expecting a stackmap frame at branch target with Cobertura using mojo 错误

java - Servlet 过滤器 - 更改 URL 不起作用