【发布时间】:2020-03-09 07:47:07
【问题描述】:
嗨,由于 Hibernate 中的自定义函数,我对 group by 有一些问题。 查询如下:
@Query("SELECT NEW ReportDay(" +
"FUNCTION('atTimezone', p.startDate, :timezone), "
"SUM(p.energy)) " +
"FROM Process p GROUP BY FUNCTION('atTimezone', p.startDate, :timezone)")
抛出的错误是 p.startDate 必须出现在 groupBy 子句或聚合函数中。但是自定义函数在group by子句中。
有什么想法吗?自定义函数是这样的:
registerFunction("atTimezone", new SQLFunctionTemplate(StandardBasicTypes.TIMESTAMP,"date_trunc('day', (cast(?1 as timestamp) AT TIME ZONE cast(?2 as varchar)))"));
并试图在特定时区将日期截断为一天。 非常感谢!
【问题讨论】:
-
你使用什么hibernate版本,数据库?
-
hibernate-core 5.0.12.Final DB 是 postgre
-
部分解决了将函数放入 MAX(...) 函数中。所以现在它看起来像:“MAX(FUNCTION('atTimezone', p.startDate, :timezone)), "
标签: spring hibernate spring-boot jpa