java - 使用 Spring Data Pageable 的 JPA Criteria 查询总和

标签 java spring jpa criteria spring-data-jpa

我在存储库中有一个方法:

public Long sumOfPrices(Specification<Order> spec) {
    CriteriaBuilder builder = em.getCriteriaBuilder();
    CriteriaQuery<Long> query = builder.createQuery(Long.class);
    Root<Order> root = query.from(Order.class);
    query.select(builder.sum(root.get(Order_.price)));
    query.where(spec.toPredicate(root, query, builder));
    return sum = em.createQuery(query).getSingleResult();
}

如何写一个可分页的方法?

public Long sumOfPrices(Specification<Order> spec, Pageable pageable)

我不知道在哪里调用 setMaxResult 和 setFirstResult,因为 sum 返回单个结果。

最佳答案

您可以执行以下操作:

public Page<Long> sumOfPrices(Specification<Order> spec, Pageable pageable) {
    // Your Query
    ...

    // Here you have to count the total size of the result
    int totalRows = query.getResultList().size();

    // Paging you don't want to access all entities of a given query but rather only a page of them      
    // (e.g. page 1 by a page size of 10). Right now this is addressed with two integers that limit 
    // the query appropriately. (http://spring.io/blog/2011/02/10/getting-started-with-spring-data-jpa)
    query.setFirstResult(pageable.getPageNumber() * pageable.getPageSize());
    query.setMaxResults(pageable.getPageSize());

    Page<Long> page = new PageImpl<Long>(query.getResultList(), pageable, totalRows);
    return page;
}

这就是我们的做法,希望对您有所帮助。

更多信息请访问:http://spring.io/blog/2011/02/10/getting-started-with-spring-data-jpa

关于java - 使用 Spring Data Pageable 的 JPA Criteria 查询总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27055964/

相关文章:

JavaMailMessage.GetContent 偶尔返回 IMAPInputStream

java - Spring Cloud Gateway - 如果存在则去掉前缀

java - Spring-Hateoas Traverson 如何从三个表中获取信息

Hibernate 模式验证在固定长度字符字段上失败

java - 无法将 NULL 插入列

java: JTable DefaultTableModel addRow(Object[] rowData)

spring - hibernate 时存储的 LocalDate 错误

java - Hibernate 逆向工程过程为 DateTime 生成 @Temporal(TemporalType.TIMESTAMP)

java - 如果只是为了搜索,是否值得将实体放在 @Transactional 服务层下?

java - 绘制节点的图片以及它们指向的位置