我尝试使用Criteria Query trim()
函数去除数据库中字段的前导零。标准查询的相关部分是:
final Expression<String> _code = cmm.get(CodeMasterMapping_.code);
builder.equal(builder.trim(Trimspec.LEADING, Character.valueOf('0'), _code), productCode)));
此代码段生成的SQL是:
trim(LEADING 0 from codemaster3_.comm_code)=?)
这导致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:错误:列&#34; a&#34;不存在
我已经使用完全相同的结果对以下组合进行了测试
如果您需要更多Criteria Query代码,请与我们联系。
根据9.5的Postgres文档,trim
函数采用以下参数:
trim([leading | trailing | both] [characters] from string)
,给出的例子是:
trim(both 'x' from 'xTomxx') --> 'Tom'
我使用CriteriaBuilder.trim()
函数是否有问题,或者Hibernate是否应该生成使用单引号作为修剪字符的SQL?