JPA Criteria使用SUM和Group By查询新列

时间:2015-05-13 18:09:14

标签: java mysql hibernate jpa criteria-api

我正在尝试使用标准查询创建一个新的计算col,如此SQL:

SELECT *, SUM(quantity) + SUM(pledged) as total, SUM(pledged) as pledged FROM stock_position GROUP BY partner_id, product_id

我需要获得此结果并设置为另一个实体,因此我需要使用别名total和map to entity。但我找不到办法做到这一点。我尝试了下面的代码。

    final CriteriaQuery<Stock> query = getCriteriaBuilder().createQuery(Stock.class);
    final Root<StockPosition> root = query.from(StockPosition.class);

    Expression<Double> quantity = getCriteriaBuilder().sum(root.<Double> get("quantity"));
    Expression<Double> pledged = getCriteriaBuilder().sum(root.<Double>get("pledged"));
    Expression<Double> total = getCriteriaBuilder().sum(quantity, pledged);

    query.select(total); //THIS GIVES ME ERROR
    query.groupBy(root.get("partner"), root.get("product"));

当然类型不同,但我不知道如何映射。任何人都可以伸出援助之手?

由于

1 个答案:

答案 0 :(得分:0)

简单:您想要总结一些值,但查询需要类Stock的实体。

正确的声明如下:

final CriteriaQuery<Double> query = getCriteriaBuilder().createQuery(Double.class);