代码之家  ›  专栏  ›  技术社区  ›  Nuno Furtado

EJB3查询+IN子句

  •  1
  • Nuno Furtado  · 技术社区  · 15 年前

    我需要使用一个in子句,如下面的SQL

    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 回复  |  直到 14 年前
        1
  •  5
  •   mR_fr0g    15 年前

    问题是当你使用 :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);
    
        2
  •  1
  •   KevMo    15 年前

    我已经很久没有做过EJBQL了,但是这应该可以工作:

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

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