【问题标题】:OpenJpa how to find length of string in JPQLOpenJpa如何在JPQL中查找字符串的长度
【发布时间】:2016-11-05 12:57:10
【问题描述】:

我正在使用 openJpa 查询中的长度(ze.string)> 2。但我得到了

SQLCODE=-440, SQLSTATE=42884, SQLERRMC=CHAR_LENGTH;FUNCTION, DRIVER=3.53.95 {prepstmnt 1776269692 SELECT t0.f1, t0.f2, t0.f3, t0.f4, t0.f5, t0.f6, t0.f7, t0.f8, t0.f9, t0.f10, t0.f11, t0.f12, t0.f13, t0.f14, t0.f15, t0.f16, t0.f17 FROM table t0 WHERE (t0.f1 = ? AND CHAR_LENGTH(?) > ? AND .....

在普通查询中,当我进行长度操作时,我正在获取记录,但使用 jpa 它不起作用。我看了Here 用过的尺寸它不起作用。字段是 varchar 和 db2。从过去 1 小时开始尝试。

【问题讨论】:

    标签: jpa db2 openjpa


    【解决方案1】:

    DB2 需要使用 SQL 函数 LENGTH,但 OpenJPA 似乎错误地将您的 JPQL 转换为使用 SQL 函数 CHAR_LENGTH(因此出现错误消息 - 并不是 DB2 给出了明确的消息说明出了什么问题,谁知道呢? SQLCODE=-440 是什么,无需搜索!!)。 在您的 JPA 提供程序上提出错误。

    https://www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000818.html

    【讨论】:

      【解决方案2】:

      您需要提供有关您的实体、persistence.xml 和查询的更多详细信息才能深入了解。但是,我看不到 OpenJPA 如何使用 CHAR_LENGTH 而不是 DB2 的 LENGTH。让我解释。如果您在这里查看 DBDictionary:

      https://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?view=markup

      你可以看到它定义了一个叫做“stringLengthFunction”的东西,如下所示:

      public String stringLengthFunction = "CHAR_LENGTH({0})";

      这是字符串长度函数,应该用于每个单独的字典(即数据库配置)。但是,对于 DB2,AbstractDB2Dictionary,请参见此处:

      https://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/AbstractDB2Dictionary.java?view=markup

      如下覆盖:

      stringLengthFunction = "LENGTH({0})";

      鉴于此,对于 DB2,应该使用 LENGTH。我进行了以下简单查询:

      "select me.id from MyEntity me where length(me.name)>2"

      并使用 DB2 在 OpenJPA 上执行它,我得到了这个:

      从 MYENTITY t0 中选择 t0.ID WHERE (CAST(LENGTH(t0.ID) AS BIGINT) > CAST(? AS BIGINT)) [params=(long) 2]

      谢谢,

      希思·托曼

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-13
        • 2013-05-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多