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
È stato utile?

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
scroll top