OpenJpa如何在JPQL中查找字符串长度
我正在使用 openJpa查询中的长度(ze.string)>2。但是我越来越OpenJpa如何在JPQL中查找字符串长度,jpa,db2,openjpa,Jpa,Db2,Openjpa,我正在使用 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
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它不起作用。我看起来像是用过的尺寸,它不起作用。字段是varchar和db2。从过去1小时开始尝试。DB2需要使用SQL函数
LENGTH
,但OpenJPA似乎错误地将JPQL转换为使用SQL函数CHAR\u LENGTH
(因此错误消息-不是DB2给出明确的消息说明什么是错误的,谁知道SQLCODE=-440是什么而不必搜索!!)。
在您的JPA提供商上引发错误
请参见DB2需要使用SQL函数
LENGTH
,但OpenJPA似乎错误地将JPQL转换为使用SQL函数CHAR_LENGTH
(因此出现了错误消息-不是DB2给出了明确的消息,说明了什么是错误的,谁知道SQLCODE=-440是什么而不必搜索!!)。
在您的JPA提供商上引发错误
请参见,您需要提供有关实体、persistence.xml和查询的更多详细信息,以了解最底层或最底层。但是,我不知道OpenJPA如何在DB2中使用CHAR_LENGTH而不是LENGTH。让我解释一下。如果您在这里查看DBDictionary: 您可以看到它定义了一个名为“stringLengthFunction”的函数,如下所示: 公共字符串stringLengthFunction=“CHAR_LENGTH({0})” 这是字符串长度函数,应用于每个单独的字典(即数据库配置)。但是,对于DB2抽象db2dictionary,请参见此处: 如下所示: stringLengthFunction=“长度({0})” 因此,对于DB2,应该使用长度。我接受了以下简单的查询: “从MyEntity me中选择me.id,其中长度(me.name)>2” 并使用DB2在OpenJPA上执行,我得到了以下结果: 从MYENTITY t0中选择t0.ID,其中(CAST(长度(t0.ID)为BIGINT)>CAST(?为BIGINT))[params=(长)2] 谢谢
Heath Thomann您需要提供有关实体、persistence.xml和查询的更多详细信息,才能了解到底。但是,我不知道OpenJPA如何在DB2中使用CHAR_LENGTH而不是LENGTH。让我解释一下。如果您在这里查看DBDictionary: 您可以看到它定义了一个名为“stringLengthFunction”的函数,如下所示: 公共字符串stringLengthFunction=“CHAR_LENGTH({0})” 这是字符串长度函数,应用于每个单独的字典(即数据库配置)。但是,对于DB2抽象db2dictionary,请参见此处: 如下所示: stringLengthFunction=“长度({0})” 因此,对于DB2,应该使用长度。我接受了以下简单的查询: “从MyEntity me中选择me.id,其中长度(me.name)>2” 并使用DB2在OpenJPA上执行,我得到了以下结果: 从MYENTITY t0中选择t0.ID,其中(CAST(长度(t0.ID)为BIGINT)>CAST(?为BIGINT))[params=(长)2] 谢谢 希思·托曼