我正在尝试执行以下查询:
SELECT p FROM Pessoa p WHERE TRANSLATE(UPPER(p.nome), 'ÂÁÀÄÃÊÉÈËÎÍÌÏÔÓÒÖÕÛÚÙÜÇ', 'AAAAAEEEEIIIIOOOOOUUUUC') LIKE CONCAT('%',TRANSLATE(UPPER(?1), 'ÂÁÀÄÃÊÉÈËÎÍÌÏÔÓÒÖÕÛÚÙÜÇ', 'AAAAAEEEEIIIIOOOOOUUUUC'),'%')
但我意识到hibernate正在生成以下最终SQL:
... where TRANSLATE(upper(pessoa0_.ds_nome), 'ÂÁÀÄÃÊÉÈËÎÍÌÏÔÓÒÖÕÛÚÙÜÇ', 'AAAAAEEEEIIIIOOOOOUUUUC') like ('%'||TRANSLATE(upper(?)||'ÂÁÀÄÃÊÉÈËÎÍÌÏÔÓÒÖÕÛÚÙÜÇ'||'AAAAAEEEEIIIIOOOOOUUUUC')||'%')...
请注意,TRANSLATE函数中的逗号被 || 替换,导致 org.postgresql.util.PSQLException:ERROR:函数translate(text)不存在
我做错了什么?
Spring:4.3.4.RELEASE
Spring数据:spring-data-jpa:1.10.5.RELEASE
答案 0 :(得分:0)
Hibernate并不是简单地替换逗号。它正在转换JPQL(或可能是HQL)查询到SQL。双管||
是JPQL CONCAT
函数的常用SQL语法。
如果它对你的Postgres数据库不起作用,你可能使用了错误的方言。配置Hibernate为您的数据库使用正确的Dialect。
See for example this article了解如何做到这一点。