Postgres的AT TIME ZONE无法进入休眠状态

时间:2019-05-10 11:14:54

标签: 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
antlr.NoViableAltException: unexpected token: AT

1 个答案:

答案 0 :(得分:0)

我看到了几个问题。首先,似乎您正在使用带有createQuery的HQL / JPQL查询,并且HQL不支持AT TIME ZONE语法,因此您将不得不使用本机查询。这意味着必须使用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

并且您的SubmitDate参数必须为java.sql.Datejava.time.LocalDate,这样就不需要转换。