休眠查询
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
答案 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.Date
或java.time.LocalDate
,这样就不需要转换。