sui*_*ide 3 orm jpa jpql jpa-2.0
我想通过JPA2获得我的前100个产品的平均价格.查询应该看起来像这样(我的sql有点生疏):
select avg(price) from (
select p.price from Product p order by p.price desc limit 100)
Run Code Online (Sandbox Code Playgroud)
但那根本不起作用.我也试过这个:
select avg(p.price) from Product p where p.id =
(select pj.id from Product pj order by pj.price desc limit 100)
Run Code Online (Sandbox Code Playgroud)
这是在限制关键字之前.
我读过JPQL中没有限制.
有关如何做到这一点的任何想法?标准也没关系.
JPQL 不支持'LIMIT' .以下是使用Criteria-API的示例代码.
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Double> criteriaQuery = builder.createQuery(Double.class);
Root<Product> productRoot = criteriaQuery.from(Product.class);
criteriaQuery.select(builder.avg(productRoot.get("price")));
criteriaQuery.orderBy(builder.desc(productRoot.get("price"));
Double average = (Double)entityManager.createQuery(criteriaQuery).setMaxResults(100).getSingleResult();
Run Code Online (Sandbox Code Playgroud)
要么
Double average = (Double)entityManager.createQuery("select avg(p.price) from Product p order by p.price").setMaxResults(100).getSingleResult();
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,则必须执行两个查询 - 选择明确排序的记录然后平均它们.
如果可移植性不是问题,则可以使用本机查询,可以使用单个查询完成相同的操作,因为许多RDBMS支持限制从数据库获取的结果数.
| 归档时间: |
|
| 查看次数: |
11112 次 |
| 最近记录: |