【问题标题】:EJB3 Query + in clauseEJB3 查询 + in 子句
【发布时间】:2010-10-23 17:12:31
【问题描述】:

我需要使用如下 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

【问题讨论】:

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


    【解决方案1】:

    问题是当您在 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);
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-02
        • 1970-01-01
        • 2012-04-24
        • 2011-07-21
        • 1970-01-01
        • 2017-07-20
        • 2014-01-02
        • 2019-04-01
        相关资源
        最近更新 更多