Hibernate/JPA CriteriaQuery trim函数是否为PostgreSQL生成了错误的SQL
我正在尝试使用Criteria QueryHibernate/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
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}
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'