2009-05-04 110 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作爲數字數組,而不是字符串