How to use a dynamic parameter in a IN clause of a JPA named query?
JPA support the use of a collection as a list literal parameter only in JPQL queries, not in native queries. Some JPA providers support it as a proprietary feature, but it's not part of the JPA specification (see https://stackoverflow.com/a/3145275/1285097).
Named parameters in native queries also aren't part of the JPA specification. Their behavior depends on the persistence provider and/or the JDBC driver.
Hibernate with the JDBC driver for Oracle support both of these features.
List<String> selectedValues = Arrays.asList("STRING1", "STRING2");final String parameterizedQuery = "select * from SOMETABLE where SOMEFIELD in (:selectedValues)";return em.createNativeQuery(parameterizedQuery) .setParameter("selectedValues", selectedValues) .getResultList();
This worked for me in derby. parameter without "()".
List<String> selectedValues = Arrays.asList("STRING1", "STRING2");final String parameterizedQuery = "select * from SOMETABLE where SOMEFIELD in :selectedValues";return em.createNativeQuery(parameterizedQuery) .setParameter("selectedValues", selectedValues) .getResultList();