查询Dsl获取分组对象

时间:2015-03-09 13:07:56

标签: java querydsl

我有这些类/实体:

class Item {
  int id;
  String name;
}

class Sale {
 Item item;
 double value;
}

如何使用查询DSL获取按项目分组的销售总额?

我可以运行此查询:

QSale sale = QSale.sale;
QItem item = QItem.item;

from(sale).join(sale.item, item).groupBy(item).list(item.id, sale.value.sum())

但是这只返回项目ID及其总和,但是如何获取整个Item对象及其总和?

如果我将查询写为:

from(sale).join(sale.item, item).groupBy(item).list(item, sale.value.sum())

我会得到:

  

列'Item.name'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

1 个答案:

答案 0 :(得分:0)

这应该有效

QSale sale = QSale.sale;
QItem item = QItem.item;

query.from(sale)
  .join(sale.item, item)
  .list(item.id, sale.value.sum())
  .transform(GroupBy.groupBy(item).as(GroupBy.sum(sale.value)))

GroupBygroupBy结束的地方开始。它通过结果后处理http://www.querydsl.com/static/querydsl/3.6.2/reference/html/ch03s02.html#d0e2185

提供深度聚合功能