Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como usar um parâmetro dinâmico em uma cláusula IN de uma consulta nomeada JPA?


O JPA suporta o uso de uma coleção como um parâmetro literal de lista apenas em consultas JPQL, não em consultas nativas. Alguns provedores JPA oferecem suporte a ele como um recurso proprietário, mas não faz parte da especificação JPA (consulte https://stackoverflow.com/a/3145275/1285097).

Parâmetros nomeados em consultas nativas também não fazem parte da especificação JPA. Seu comportamento depende do provedor de persistência e/ou do driver JDBC.

A hibernação com o driver JDBC para Oracle oferece suporte a esses dois recursos.
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();