【问题标题】:JPA: Aggregation on day of weekJPA:星期几的聚合
【发布时间】:2023-10-28 14:31:01
【问题描述】:

我看到 JPA 缺乏提供日期/时间提取功能。例如如何实现以下简单目标

calculate total revenue by given days of week (i.e. revenue only on Friday, Saturday, Sunday)?

理想情况下应该有一个 API,所以

select sum(revenue) from salesreport where day_of_week(date) in (:daysList);

我认为在 JPA(我正在使用 OpenJPA)而不是原生查询中没有简单的方法来实现它。一些 JPA 供应商提供Year()Month()Day()(月中的某天),但一周中的某天没有

【问题讨论】:

  • OpenJPA 是否提供供应商扩展以在 JPQL 中使用 SQL 函数(这是 JPA 2.1 中的标准,但 OpenJPA 不支持)?如果是这样,那么您可以使用 SQL 函数来获取星期部分
  • @Neil Stockton 谢谢,但这不是等同于使用本机查询(特定于数据库供应商)吗?

标签: java hibernate jpa openjpa


【解决方案1】:

使用 Hibernate,您可以

SELECT EXTRACT(WEEK FROM d.tstamp), SUM(d.revenue) 
FROM Dosh d 
GROUP BY EXTRACT(WEEK FROM d.tstamp)

为此,底层 RDBMS 必须支持 EXTRACT 函数。

我在 EclipseLink 上看到过一份声称相同作品的报告。

【讨论】: