users@glassfish.java.net

Re: Setting a list as a parameter for an IN expression

From: Dies Koper <diesk_at_fast.au.fujitsu.com>
Date: Tue, 13 Oct 2009 22:35:57 +1100

Hi Loren,

Support for IN's collection_valued_input_parameter as it is called was
added in JPA 2.0, so the JPA 1.0 based provider in GFv2.1 (TLE) does not
support it.
Can you try it with EclipseLink?

Regards,
Dies


glassfish_at_javadesktop.org wrote:
> Whenever I try to set a list as a parameter for use in an IN
> expression I get an Illegal argument exception. Various posts on the
> internet seem to indicate that this is possible, but it's certainly
> not working for me. I'm using Glassfish V2.1 with Toplink.
>
> Has anyone else been able to get this to work, if so how?
>
> here's some example code:
>
> 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();
>
> and the relevant part of the stack trace:
>
> 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 [Message sent by forum member 'loren_'
> (loren.cole_at_gmail.com)]
>
> http://forums.java.net/jive/thread.jspa?messageID=367688