EJB3 Query + in子句

时间:2009-05-04 19:10:48

标签: java oracle hibernate ejb-3.0 ora-01722

我需要像下面的SQL一样使用IN子句

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

我如何在EJBQL中执行此操作?

我试过以下,显然失败了:

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

然后在java中我做了

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

给了我以下异常

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

2 个答案:

答案 0 :(得分:5)

问题是当你在sql片段中使用:parameter_name然后调用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 :(得分:1)

自从我完成EJBQL以来已经有很长一段时间了,但这应该可行:

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

此外,您可能需要将colValues设置为数字数组而不是字符串