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: クエリ文字列 SELECT a.accountManager.loginName FROM Account a WHERE a から予期されるクラス java.lang.Long の型で、パラメーター accountIds の型クラス java.util.Arrays$ArrayList の値を設定しようとしました.id IN (:accountIds)。 oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.setParameterInternal(EJBQueryImpl.java:663)で oracle.toplink.essentials.internal.ejb.cmp3.EJBQueryImpl.setParameter(EJBQueryImpl.java:202)で com.corenap.newtDAO.ContactDaoBean.getNotificationAddresses (ContactDaoBean.java:437) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) で java.lang.reflect.Method.invoke(Method.java:597) で com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1011) で com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:175) で com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2920) で com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4011) で com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:203) で ... 67 以上