【发布时间】: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),而不是让服务器推断或将其设置为text(java.sql.Types.STRING)。 -
那么为什么不在日志中查看它尝试使用的 SQL 是什么?我在我使用的 JPA 实现(DataNucleus)中使用了这种类型的语法并且没有问题
标签: hibernate postgresql jpa named-parameters