我正在尝试使用 HQL 按月对一些行进行分组,但我对该 API 有点陌生,似乎无法让它工作。
这是我的代码:
Criteria query = getHibernateSession().createCriteria(SalesPerformance.class);
// summary report is grouped by date
query.setProjection(Projections.projectionList().add(
Projections.groupProperty("effectiveDate"), "effectiveDate").add(
Projections.groupProperty("primaryKey.seller", "seller").add(
Projections.sum("totalSales"))));
// sub-select based on seller id
query.add(Property.forName("primaryKey.seller.id").eq(sellerId)).setFetchMode(
"primaryKey.seller", FetchMode.SELECT);
query.add(Property.forName("primaryKey.effectiveDate").le(new Date()));
query.add(Property.forName("primaryKey.effectiveDate").ge(DateUtils.truncate(new Date(), Calendar.MONTH)));
query.addOrder(Order.desc("primaryKey.effectiveDate"));
return query.list();
我对这个查询的问题是,由于 Projections.groupProperty("effectiveDate"),当我每月需要一行时,它将每天返回一行。
我考虑过使用 Projections.sqlGroupProjection 而不是 Projections.groupProperty 并添加一些 HQL,但是我发现的文档和几个示例并没有真正帮助我理解如何将正确的 postresql 语句放入该方法中。
任何了解 Postgres 和 HQL 的人都可以在这里给出一些提示吗?