【问题标题】:JPA lower() function on parameter参数上的 JPA lower() 函数
【发布时间】:2015-02-24 03:01:46
【问题描述】:

我已经将项目从 spring 3.2 更新到 4.1 并将 hibernate 4.2 更新到 4.3.7 并且遇到了有趣的问题。 我有疑问:

function parameter: String email;
getQuery(getSelect() + "where lower(o.email) = lower(:email)").setParameter("email", email);

现在,我得到了结果

org.postgresql.util.PSQLException: 错误: 函数 lower(bytea) 确实 不存在 提示:没有函数匹配给定的名称和参数 类型。您可能需要添加显式类型转换。

但如果我打电话

getQuery(getSelect() + "where lower(o.email) = lower('test')")

getQuery(getSelect() + "where lower(o.email) = lower(:email)").setParameter("email", "test")

它工作正常。

【问题讨论】:

  • 当你明确指定参数类型时它是否工作,例如。 setParameter("email", email, StringType.INSTANCE) ?
  • 奇怪的问题。似乎 Hibernate 出于某种原因将类型参数发送为bytea(或者更确切地说,可能是java.sql.Types.BLOB),而不是让服务器推断或将其设置为textjava.sql.Types.STRING)。
  • 那么为什么不在日志中查看它尝试使用的 SQL 是什么?我在我使用的 JPA 实现(DataNucleus)中使用了这种类型的语法并且没有问题

标签: hibernate postgresql jpa named-parameters


【解决方案1】:

setParameter("email", email, StringType.INSTANCE) - 解决了我的问题,感谢帮助!

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 2015-06-13
    • 2019-04-16
    • 2018-07-28
    • 1970-01-01
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 2022-07-14
    相关资源
    最近更新 更多