【发布时间】: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