通过单个查询获取最小和最大列值

时间:2018-07-19 07:29:20

标签: java hibernate entity jpa-2.0 criteria

如何通过使用jpa而不使用本机查询来获取minmax的值?

必须通过单笔交易获取结果。

相对sql查询:

SELECT min(price), max(price) FROM product

我尝试使用此代码

criteria.setProjection(Projections.min("price"));
Integer min = (Integer) criteria.uniqueResult();
...
criteria.setProjection(Projections.max("price"));
Integer max = (Integer) criteria.uniqueResult();

但这似乎太奇怪了,无法执行两次。

2 个答案:

答案 0 :(得分:1)

使用投影列表:

criteria.setProjection(
  Projections.projectionList()
    .add(Projections.min("price"))
    .add(Projections.max("price"))
);

答案 1 :(得分:0)

好吧,您需要在 ProjectionList 中使用 Criteria

您的代码如下:

criteria.setProjection(
     Projections.projectionList()
    .add(Projections.min("price"))
    .add(Projections.max("price"))
);
Object[] minMax = criteria.uniqueResult();
Integer min = (Integer) minMax[0];
Integer max = (Integer) minMax[1];

另一种选择是将HQL与minmax Aggregate functions结合使用:

Query q = session.createQuery("select min(prd.price), max(prd.price) from Product prd");
Object[] minMax = q.getSingleResult();
Integer min = (Integer) minMax[0];
Integer max = (Integer) minMax[1];