gpt4 book ai didi

java - 使用 Hibernate 中的条件按月分组

转载 作者:IT老高 更新时间:2023-10-28 21:12:31 26 4
gpt4 key购买 nike

我正在尝试使用 Criteria 和 ProjectionList 获取报告,而我对通过 hibernate 使用它还是很陌生。所以我有这个模型:

private Long _userId;

private Category _category;

private Long _companyId;

private Double _amount;

private Date _date;

我使用这个来构建查询:

  public List sumPaymentsByUserCategoryPeriod(Category category, Long userId,Integer period){
GregorianCalendar from = new GregorianCalendar();
from.add(Calendar.MONTH, -period);
List<CategoryAmount> resultDTO= new ArrayList<CategoryAmount>();

Criteria criteria = getSession().createCriteria(Payment.class);
criteria.add(Restrictions.eq("_category", category));
criteria.add(Restrictions.eq("_userId",userId));
criteria.add(Restrictions.between("_date", from.getTime(), new Date()));

ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.sum("_amount"));
projectionList.add(Projections.groupProperty("_date"));
criteria.setProjection(projectionList);
return criteria.list();

}

基本上,此方法接收一个类别和一个用户 ID 来过滤付款记录和一个期间,谁将指示从现在到后面多少个月我想求和。如何获得按月分组的总和结果?

任何帮助或提示,我将不胜感激!

最佳答案

我找到了答案,而且非常简单。我为此更改了 ProjectionList 标准中的“groupProperty”:

projectionList.add(Projections.sqlGroupProjection(
"month({alias}.DATE) as month, year({alias}.DATE) as year",
"month({alias}.DATE), year({alias}.DATE)",
new String[]{"month","year"},
new Type[] {Hibernate.DOUBLE}));

好的。我将解释 sqlGroupProjection。第一个参数是“select”之后的查询部分,例如:

Select [firstPartOfSqlGroupProjection] * boo;

“{alias}”是 hibernate 在查询中用于引用表的别名。

sqlGroupProjection 函数的第二个参数是 group by 条件,第三个参数是您将从 group by 获得的列名,最后是您将使用的数据类型。

关于java - 使用 Hibernate 中的条件按月分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2067363/

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