How to use a dynamic parameter in a IN clause of a JPA named query? How to use a dynamic parameter in a IN clause of a JPA named query? oracle oracle

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();


Instead of:

nativeQuery.setParameter("selectedValues", params);

I had to use:

nativeQuery.setParameterList("selectedValues", params);


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();