java - 将参数设置为 IN 表达式的列表

标签 java jpa glassfish jpql toplink-essentials

每当我尝试将列表设置为在 IN 表达式中使用的参数时,都会出现非法参数异常。互联网上的各种帖子似乎表明这是可能的,但它肯定不适合我。我正在使用带有 Toplink 的 Glassfish V2.1。

有没有其他人能够让这个工作,如果可以,如何?

这里有一些示例代码:

List<String> logins = em.createQuery("SELECT a.accountManager.loginName " +
    "FROM Account a " +
    "WHERE a.id IN (:ids)")
    .setParameter("ids",Arrays.asList(new Long(1000100), new Long(1000110)))
    .getResultList();

以及堆栈跟踪的相关部分:

java.lang.IllegalArgumentException: You have attempted to set a value of type class java.util.Arrays$ArrayList for parameter accountIds with expected type of class java.lang.Long from query string SELECT a.accountManager.loginName FROM Account a WHERE a.id IN (:accountIds).
at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.setParameterInternal(EJBQueryImpl.java:663)
at oracle.toplink.essentials.internal.ejb.cmp3.EJBQueryImpl.setParameter(EJBQueryImpl.java:202)
at com.corenap.newtDAO.ContactDaoBean.getNotificationAddresses(ContactDaoBean.java:437)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1011)
at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:175)
at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2920)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4011)
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:203)
... 67 more

最佳答案

您的 JPQL 无效,请去掉括号

List<String> logins = em.createQuery("SELECT a.accountManager.loginName " +
    "FROM Account a " +
    "WHERE a.id IN :ids")
    .setParameter("ids",Arrays.asList(new Long(1000100), new Long(1000110)))
    .getResultList();

关于java - 将参数设置为 IN 表达式的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1557085/

相关文章:

java - InitialContext 的 OSGi 和 ClassNotFoundException

java - 在 spring-data-mongodb 中返回 $last 聚合中的对象

java - 大多数基本的 libgdx 应用程序崩溃

java - 为 JButton 添加全局键绑定(bind)?

java - (Person)o.getName() 和 ((Person)o).getName() 之间的区别

hibernate - 如何将 SLF4J 用于部署在带有 Hibernate JPA 的 GlassFish 3 上的 Java EE Web 应用程序?

mysql - 具有不同大小写的属性表现异常

java - 使用 JPA 查询表并填充与表对应的 bean

jpa - 如何使用 QueryDSL JPA 加入获取集合中元素的属性

java - org.glassfish.jersey.servlet.ServletContainer 类NotFoundException