java - 使用 hibernate 查询 : colon gets treated as parameter/escaping colon

标签 java hibernate spring postgresql hql

return sessionFactory.getCurrentSession().
            createQuery("FROM Weather WHERE city_id = :id AND date " +
                    "BETWEEN now()::date AND now()::date + (:days - 1)").
                    setInteger("id", city_id).setString("days", days).list();

出现错误:

org.hibernate.hql.ast.QuerySyntaxException: unexpected token: :

如何在 HQL 中使用这种语法?

基本上问题是我想在我的查询中使用冒号(:),但是当 hibernate 看到冒号时,它认为它是一个参数(:parameterName 是 HQL 中参数的语法),你可以从我的2 次使用(:id 和 :days)。

但是当我使用 now()::date 语句时,它是特定的 postgreSQL 语法, hibernate 会破坏一切。

最佳答案

我刚遇到这个问题,不得不使用类型转换,所以我尝试了一些东西来让它工作。原来你逃脱了:在 hibernate 中 \

但是,在 java 中,要打印 \ 开始,您必须使用 \ 对其进行转义。
所以,如果你想在你的 SQL hibernate 查询中放一个 :,你必须这样写: \\:

如果你想在 PostgreSQL 中进行转换,例如在我的情况下,你必须,例如: field\\:\\:int 如果你想将某个字段转换为整数。

关于java - 使用 hibernate 查询 : colon gets treated as parameter/escaping colon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7475876/

相关文章:

hibernate - JPA 等效于 Hibernate.initialize 的命令

spring - Spring Data Elasticsearch 是否支持 Amazon Elasticsearch?

java - 发现以元素 'jpa:repository' 开头的无效内容

java - 我应该将配置类注释为 @Configuration 以进行测试吗?

java - Java中的多点三边测量算法

java - 正则表达式仅匹配一次

java - Woodstox stax 和 java stax 冲突

java - 删除多对多关系中的所有内容 (JPA)

java - Spring Boot + MySQL 社区服务器

java - BHSM-Servlet 不允许浏览器缓存用户名