Query EJB3 + nella clausola
Domanda
Devo usare una clausola IN come il seguente SQL
SELECT * FROM tableA WHERE colA in (1, 2,3)
Come posso farlo in EJBQL?
ho provato quanto segue, che ovviamente non è riuscito:
SELECT tab FROM tableA tab WHERE tab.colA in (:colValues)
poi in java l'ho fatto
query.setParameter("colValues","1,2,3")
che mi dà la seguente eccezione
org.apache.openjpa.lib.jdbc.ReportingSQLException: ORA-01722: invalid number
Soluzione
Il problema è quando si utilizza : nome_parametro
in un frammento sql e quindi si chiama la query . setParamter (" nome_parametro " ;, valori)
si prevede che valori
dovrebbe essere una sorta di collection
. Prova questo.
List<Integer> values = new ArrayList<Integer>();
values.add(1);
values.add(2);
values.add(3);
query.setParameter("colValues", values);
Altri suggerimenti
È passato molto tempo da quando ho fatto EJBQL, ma questo dovrebbe funzionare:
SELECT OBJECT(t)
FROM Tab AS t
WHERE t.colA IN (:colValues)
Inoltre, potrebbe essere necessario impostare colValues ??come una matrice di numeri anziché come stringa
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow