Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie verwende ich einen dynamischen Parameter in einer IN-Klausel einer benannten JPA-Abfrage?

JPA unterstützt die Verwendung einer Sammlung als Listenliteralparameter nur in JPQL-Abfragen, nicht in nativen Abfragen. Einige JPA-Anbieter unterstützen es als proprietäres Feature, aber es ist nicht Teil der JPA-Spezifikation (siehe https://stackoverflow.com/a/3145275/1285097).

Benannte Parameter in nativen Abfragen sind ebenfalls nicht Teil der JPA-Spezifikation. Ihr Verhalten hängt vom Persistenzanbieter und/oder dem JDBC-Treiber ab.

Der Ruhezustand mit dem JDBC-Treiber für Oracle unterstützt beide Funktionen.

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