Tengo un repository que se ve así:
public interface UserRepository extends JpaRepository { User findByEmailIgnoreCase(String email); @Query("select u from User u where u.id in (:ids)") Set getByIdInSet(@Param("ids") Set ids); }
Cuando llamo a getByIdInSet
obtengo el siguiente error:
Caused by: java.lang.IllegalArgumentException: You have attempted to set a value of type class org.eclipse.persistence.indirection.IndirectSet for parameter ids with expected type of class java.lang.Long from query string select u from User u where u.id in (:ids). at org.eclipse.persistence.internal.jpa.QueryImpl.setParameterInternal(QueryImpl.java:933) at org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameter(EJBQueryImpl.java:593) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606)
Aparentemente, no sé qué significa porque he intentado cambiar todo tipo de tipos de datos y sigo teniendo el mismo error. El conjunto de ID que estoy pasando contiene solo un ID. Por favor, apúntame en la dirección correcta.
Pruébalo sin los soportes.
@Query("select u from User u where u.id in :ids")
La última versión de Spring Data JPA admite la palabra clave IN que se puede usar para crear la consulta de la siguiente manera:
Set findByIdIn(Set ids);