Hibernate/JPA CriteriaQuery trim函数是否为PostgreSQL生成了错误的SQL

Hibernate/JPA CriteriaQuery trim函数是否为PostgreSQL生成了错误的SQL,hibernate,jpa,criteria,jpa-2.1,Hibernate,Jpa,Criteria,Jpa 2.1,我正在尝试使用Criteria Querytrim()函数去除数据库中字段的前导零。条件查询的相关部分是: final Expression<String> _code = cmm.get(CodeMasterMapping_.code); builder.equal(builder.trim(Trimspec.LEADING, Character.valueOf('0'), _code), productCode))); 这导致Postgres出现以下例外情况: PSQLExce

我正在尝试使用Criteria Query
trim()
函数去除数据库中字段的前导零。条件查询的相关部分是:

final Expression<String> _code = cmm.get(CodeMasterMapping_.code);
builder.equal(builder.trim(Trimspec.LEADING, Character.valueOf('0'), _code), productCode)));
这导致Postgres出现以下例外情况:

PSQLException:错误:函数pg_catalog.ltrim(字符变化,整数)不存在 提示:没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换

然后我将零
0
更改为一个字符,认为postgres可能将零
0
解释为一个整数,因此触发了异常

将要删除的字符更改为
A

builder.equal(builder.trim(Trimspec.LEADING, Character.valueOf('A'), _code), productCode)));
但这会生成以下SQL:

trim(LEADING A from codemaster3_.comm_code)=?)
以及以下SQL异常:

PSQLException:错误:列“a”不存在

我已经在以下组合上进行了测试,得到了完全相同的结果

  • Postgres 9.5.5、Wildfly 9.0.2.Final和Hibernate核心{4.3.10.Final}
  • Postgres 9.5.5、Wildfly 10.1.0.Final和Hibernate核心{5.0.10.Final}
如果您需要更多用于条件查询的代码,请告诉我

根据Postgres文档的
trim
功能,获取以下参数:

trim([leading | trailing | both] [characters] from string)
给出的例子是:

trim(both 'x' from 'xTomxx') --> 'Tom'

我使用的
CriteriaBuilder.trim()
函数有什么问题吗?或者Hibernate应该生成使用单引号对trim字符进行修剪的SQL吗?

我真的不知道Hibernate,但是为什么不为要删除的字符传递一个
字符串呢?e、 g.
“A”
而不是
Character.valueOf('A')
@A\u horse\u和\u no\u name trim()不允许它->
表达式trim(Trimspec ts,表达式t,表达式x)
t
@param t表达式,用于要修剪的字符
Hmm,没有真正意义,因为Postgres接受一个包含多个字符的字符串。确认为错误-在Hibernate ORM 5.2.7.Final中修复错误-谢谢@vlad mihalcea
trim(both 'x' from 'xTomxx') --> 'Tom'