postgresql - Postgres 的 AT TIME ZONE 不能在休眠状态下工作
问题描述
休眠查询
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 查询,并且AT TIME ZONE
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
并且您的 submitDate 参数必须是 ajava.sql.Date
或 a java.time.LocalDate
,因此您不需要转换。
推荐阅读
- r - R在R中的两个数据框的列之间匹配字符串
- slick.js - 在中心模式下跳跃的光滑滑块增加
- c - 按下 F10 或热键时启动 exe 所需的 C 代码
- linear-algebra - 关于奇异值分解中行空间中的标准正交基 v 的混淆?
- laravel - 为什么 Nuxtjs Axios 代理无法在服务器上运行?
- c++ - 用于接收/发送的 Libcurl 和用户定义函数
- html - 模态对话框未显示 - PUG
- unity3d - Unity C# 类新方法给出错误“类”不包含“名称”的定义
- linux - 如何从我的应用程序中提升 Raspberry Pi 上的“无线和有线网络设置”面板?
- c++ - 在派生对象的 get 方法上使用基础对象的 set 方法