gpt4 book ai didi

java - Hibernate 结果按日期年/月分组

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:32 26 4
gpt4 key购买 nike

对于显示给定时间段内文章的销售统计数据的近乎经典的任务,我偶然发现了一个有趣的问题:假设,我有一个包含文章编号、金额和日期的数据库表,我想首先按年份对文章及其金额进行分组(过去两年用于概览),然后按月进行精细的详细 View 。

到目前为止,我的解决方案都是基于 Hibernate 实体方法,因为我请求了实体并使用以下策略将它们分组在 Java 中

  1. 请求表中的所有条目(1 个 SQL 请求)。
  2. 仅请求给定时间段内的条目(2 个 SQL 请求用于年份概览,12 个请求用于月份图表)。

我想知道是否有更实用的方法利用 SQL(使用 Hibernate)的优势,理想情况下不需要 Java 中的任何分组代码,我创建了一个小 SQL Fiddle 示例( http://sqlfiddle.com/#!2/97a5d )来演示结果(2013 年:8 篇文章,2012 年:18 篇文章//2013 年 9 月:5 篇文章,2013 年 6 月:3 篇文章,2012 年 6 月:7 篇文章,2012 年 2 月: 11 篇文章)。

到目前为止谢谢你,斯穆杰

最佳答案

您可以使用投影(例如 sqlProjection)并将它们添加到您的 hibernate 条件中以检索所需的结果。

例如 here 中的代码

HibernateTemplate ht = new HibernateTemplate(sessionFactory);

DetachedCriteria criteria = DetachedCriteria
.forClass(Departments.class);

ProjectionList pl = Projections.projectionList();
pl.add(Projections.groupProperty("yearStarted"));
pl.add(Projections.sqlProjection("count(*) AS countOne, year_started AS ys",
new String[] { "countOne", "ys" }, new Type[] {
Hibernate.INTEGER, Hibernate.INTEGER }));

criteria.setProjection(pl);

List results = ht.findByCriteria(criteria);
System.out.println("Count : " + results.size());
System.out.println("First Value : " + results.get(0));

关于java - Hibernate 结果按日期年/月分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22528027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com