Hibernate查询
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
我看到了几个问题。首先,看来您正在使用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
,您的提交参数必须是java.sql.Date
或java.time.LocalDate
,因此您不需要转换。