使用单个查询获取最小和最大列值
Get min and max column values with single query
如何使用 jpa 而不是使用本机查询来获取 min
和 max
值?
必须通过单笔交易获取结果。
相对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();
但这似乎太奇怪了,无法执行两次。
使用投影列表:
criteria.setProjection(
Projections.projectionList()
.add(Projections.min("price"))
.add(Projections.max("price"))
);
那么你需要使用 ProjectionList
with your 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,min
和 max
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];
如何使用 jpa 而不是使用本机查询来获取 min
和 max
值?
必须通过单笔交易获取结果。
相对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();
但这似乎太奇怪了,无法执行两次。
使用投影列表:
criteria.setProjection(
Projections.projectionList()
.add(Projections.min("price"))
.add(Projections.max("price"))
);
那么你需要使用 ProjectionList
with your 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,min
和 max
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];