2016-11-05 66 views
1

我在openJpa查询中使用了长度(ze.string)> 2的 。但我越来越OpenJpa如何查找JPQL中的字符串长度

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小时尝试。

回答

0

你需要给你的实体的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” 如下:

公共字符串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。我采取了以下简单查询:

“从myEntity所选择我哪里me.id长度(me.name)> 2”

而且使用DB2执行它OpenJPA中,我得到这个:

SELECT t0.ID FROM myEntity所T0 WHERE(CAST(LENGTH(t0.ID)AS BIGINT)> CAST(?AS BIGINT))[PARAMS =(长)2]

谢谢,

希斯托曼

相关问题