Ilekroć próbuję ustawić listę jako parametr do użycia w wyrażeniu IN, otrzymuję niedozwolony argument wyjątku. Różne posty w Internecie zdają się wskazywać, że jest to możliwe, ale z pewnością nie działa to dla mnie. Używam Glassfish V2.1 z Toplink.Ustawianie parametru jako listy dla wyrażenia IN
Czy ktoś inny był w stanie to uruchomić, jeśli tak, w jaki sposób?
tutaj jakiś przykład kodu:
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();
i odpowiednia część śladu stosu:
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
a JPQL jest źle, usuń nawiasy – James
Zła. To zależy od implementacji z JPA 1.0 zaimplementowanej przez Hibernate, ale działa w postaci nawiasów. – Guaido79
To był błąd w Hibernate: https://hibernate.atlassian.net/browse/HHH-5126 – Kawu