Heute stand ich vor dem Problem, als Parameter einer Query eine Collection mitzugeben.
Die Query lautete wie folgt:
SELECT e FROM Entity e WHERE id IN (:ids)
Hier ein kleines Beispiel für den Aufruf in einer Facade.
public class EntityFacade { @PersistenceContext(unitName = "test") private EntityManager entityManager; ... public Collection getEntitiesByIds(Collection ids) { Query selectByIdsQuery = entityManager.createQuery("SELECT e FROM Entity e WHERE id IN (:ids)"); selectByIdsQuery.setParameter("ids", ids); return selectByIdsQuery.getResultList(); } ...
Dieser Aufruf dieser Methode liefert allerdings bei einer ArrayList die folgende IllegalArgumentException:
You have attempted to set a value of type class java.util.ArrayList for parameter ids with expected type of class java.lang.String
Die Lösung des Problems war, dass in der Query keine Klammern gesetzt werden dürfen:
SELECT e FROM Entity e WHERE id IN :ids