sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo usar un parámetro dinámico en una cláusula IN de una consulta con nombre JPA?

JPA admite el uso de una colección como un parámetro literal de lista solo en consultas JPQL, no en consultas nativas. Algunos proveedores de JPA lo admiten como una función patentada, pero no forma parte de la especificación de JPA (consulte https://stackoverflow.com/a/3145275/1285097).

Los parámetros con nombre en las consultas nativas tampoco forman parte de la especificación JPA. Su comportamiento depende del proveedor de persistencia y/o del controlador JDBC.

Hibernate con el controlador JDBC para Oracle admite ambas funciones.

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