Postgresql 博士后';在时区未在休眠状态下工作

Postgresql 博士后';在时区未在休眠状态下工作,postgresql,hibernate,timezone,Postgresql,Hibernate,Timezone,休眠查询 SELECT l.submissionDate from Lead l where date(TIMESTAMP l.submissionDate AT TIME ZONE :userOffset) = date(:submissionDate) 下面是一个问题 11:08:13.248 [http-nio-8080-exec-5] ERROR o.h.hql.internal.ast.ErrorTracker - line 1:89: unexpected token: AT an

休眠查询

SELECT l.submissionDate from Lead l where date(TIMESTAMP l.submissionDate AT TIME ZONE :userOffset) = date(:submissionDate)
下面是一个问题

11:08:13.248 [http-nio-8080-exec-5] ERROR o.h.hql.internal.ast.ErrorTracker - line 1:89: unexpected token: AT
antlr.NoViableAltException: unexpected token: AT

我看到了几个问题。首先,您似乎正在将HQL/JPQL查询与createQuery一起使用,HQL中不支持时区的
语法,因此您将不得不使用本机查询。这意味着您将不得不对所有内容使用SQL本机名称,而不是Java字段名称

第二,在where子句中比较两个用户传递的参数是没有意义的。我认为不是:

date(TIMESTAMP '2018-03-31T21:45:00.000+0000' AT TIME ZONE :userOffset) = date(:submissionDate)
你的意思是:

date(l.submissionDate AT TIME ZONE :userOffset) = date(:submissionDate)
现在,添加更正,并假设您遵循常识命名约定,表名和字段名将转换为:

SELECT l.submission_date from lead l where date(l.submission_date AT TIME ZONE :userOffset) = :submissionDate

您的submissionDate参数必须是
java.sql.Date
java.time.LocalDate
,这样您就不需要转换了。

您已经问过这个问题。