【问题标题】:Postgresql- Hibernate Query Syntax exception : org.hibernate.hql.ast.QuerySyntaxException: unexpected token at nearPostgresql-休眠查询语法异常:org.hibernate.hql.ast.QuerySyntaxException:附近出现意外令牌
【发布时间】:2018-10-09 09:37:40
【问题描述】:

我正在使用带有休眠功能的 Postgresql。 now() 工作正常,但 now() 在 UTC 时区抛出错误。

版本:Postgresql9.5。 相同的 sql 查询在 pgAdmin 中运行良好。

String sql = "SELECT a FROM XspJobRequest a " +
            "WHERE a.xspJobTypeId = :xspJobTypeId " +
            "AND a.xspJobStatusId = :xspJobStatusId " +
            "AND a.nextAttemptTs < (now() at time zone 'utc') " +
            " ORDER BY a.insertTs";
    try
    {
        Query query = entityManager.createQuery(sql);
        query.setMaxResults(limitReturnCount);
        query.setParameter("xspJobTypeId", jobType.getId());
        query.setParameter("xspJobStatusId", XspJobStatusEnum.eNew.getId());
        List<XspJobRequest> retval = query.getResultList();

        if (!alreadyActive)
        {
            et.commit();
        }
        return retval;
    }

java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌: 在第 1 行附近,第 167 列 [SELECT a FROM com.hp.jampub.db.entity.XspJobRequest 一个 WHERE a.xspJobTypeId = :xspJobTypeId AND a.xspJobStatusId = :xspJobStatusId AND a.nextAttemptTs

【问题讨论】:

  • createQuery 接受 JPQL,而不是 SQL。因此,将某些东西标记为“sql”显然是您的问题,因为您似乎希望能够在其中转储任何旧的随机 SQL(而您不能)。 JPQL 由规范定义。 “NOW()”不是其中的一部分(尽管 CURRENT_TIMESTAMP 是),“TIME ZONE 'UTC'”也不是。互联网上有大量 JPQL 文档

标签: java postgresql hibernate jpa postgresql-9.5


【解决方案1】:

比利弗罗斯特的评论是正确的。 您可以创建新的 Date 参数而不是使用 now() at time zone 'utc'

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    相关资源
    最近更新 更多