2009-05-04 83 views
0

我需要使用IN子句类似下面的SQLEJB3查询+条款

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

我怎样才能在EJBQL这样做呢?

我已经tryed以下,这显然失败:

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 

回答

4

问题是,当你在一个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

这是一个很长一段时间,因为我已经完成了EJBQL,但这应该工作:

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

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