Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment utiliser un paramètre dynamique dans une clause IN d'une requête nommée JPA ?

JPA prend en charge l'utilisation d'une collection en tant que paramètre littéral de liste uniquement dans les requêtes JPQL, pas dans les requêtes natives. Certains fournisseurs JPA le prennent en charge en tant que fonctionnalité propriétaire, mais cela ne fait pas partie de la spécification JPA (voir https://stackoverflow.com/a/3145275/1285097).

Les paramètres nommés dans les requêtes natives ne font pas non plus partie de la spécification JPA. Leur comportement dépend du fournisseur de persistance et/ou du pilote JDBC.

Hibernate avec le pilote JDBC pour Oracle prend en charge ces deux fonctionnalités.

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