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