EJB3 Query + в предложении - PullRequest
1 голос
/ 04 мая 2009

Мне нужно использовать предложение IN, как в следующем SQL

SELECT * FROM tableA WHERE colA in (1, 2,3)

Как я могу сделать это в EJBQL?

Я попробовал следующее, что, очевидно, не удалось:

SELECT tab FROM tableA tab WHERE tab.colA in (:colValues)

тогда в Яве я сделал

query.setParameter("colValues","1,2,3")

, что дает мне следующее исключение

org.apache.openjpa.lib.jdbc.ReportingSQLException: ORA-01722: invalid number

Ответы [ 2 ]

5 голосов
/ 04 мая 2009

Проблема в том, что когда вы используете :parameter_name во фрагменте sql, а затем вызываете query. setParamter("parameter_name", values), ожидается, что values должно быть чем-то вроде collection. Попробуйте это.

List<Integer> values = new ArrayList<Integer>();
values.add(1);
values.add(2);
values.add(3);

query.setParameter("colValues", values);
1 голос
/ 04 мая 2009

Прошло много времени с тех пор, как я написал EJBQL, но это должно работать:

  SELECT OBJECT(t)
       FROM Tab AS t
       WHERE t.colA IN (:colValues)

Кроме того, вам может понадобиться установить colValues ​​в виде массива чисел, а не строки

...