【问题标题】:Spring data: CONCAT are removing commas when used with TRANSLATESpring 数据:CONCAT 与 TRANSLATE 一起使用时正在删除逗号
【发布时间】:2018-06-15 13:32:49
【问题描述】:

我正在尝试执行以下查询:

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: function translate(text) does not exist强>

我做错了什么?

春季:4.3.4.RELEASE

弹簧数据:spring-data-jpa:1.10.5.RELEASE

【问题讨论】:

    标签: spring hibernate spring-data spring-data-jpa jpql


    【解决方案1】:

    Hibernate 不仅仅是替换逗号。它正在转换一个 JPQL(或可能是 HQL)查询 int SQL。双管道 || 是 JPQL CONCAT 函数的常见 SQL 语法。

    如果它不适用于您的 Postgres DB,则您可能使用了错误的方言。配置 Hibernate 以对您的数据库使用正确的方言。

    See for example this article 了解如何做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      相关资源
      最近更新 更多