【问题标题】:Pagination in createNativeQuerycreateNativeQuery 中的分页
【发布时间】:2018-03-24 04:55:49
【问题描述】:

我想在我的自定义查询中实现 Pageable。下面是我正在使用的代码。sql 是虚拟查询。有人可以告诉我如何计算总行数吗?

EntityManager em = OpenJPAUtils.openEntityManager();
String sql="select DISTINCT student.studentId from student where ... LIMIT  :limit OFFSET  :offSet ; "  
query = em.createNativeQuery(sql);
query.setParameter("limit", pageable.getPageSize());
query.setParameter("offSet", pageable.getPageNumber());
query.getResultList()

我想要总计数,但我使用的限制只能提供这么多。我可以无限制地使用相同的查询来计算总行数,但查询非常大,我不想两次运行相同的查询来获取总计数并计算行数。 非常感谢您的帮助。

【问题讨论】:

  • 所以你需要总行结果,最后一个结果是你想要计算的?
  • @SachinGupta 我想要总计数,但我使用的限制只会给出这么多。我可以无限制地使用相同的查询来计算总行数,但查询非常大,我不想运行相同的查询两次来获取总计数并计算行数。
  • 使用计数查询获取总行数。

标签: java mysql spring jpa spring-boot


【解决方案1】:

为什么不使用 JPA 提供的分页功能?

query.setFirstResult(firstIndex);
query.setMaxResults(firstIndex + pageSize);

那么sql中就不需要LIMIT子句了:

String sql="select DISTINCT student.studentId from student where ..."  

【讨论】:

    猜你喜欢
    • 2020-03-14
    • 2021-09-22
    • 2018-07-12
    • 2017-06-25
    • 2012-02-06
    • 2015-07-15
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多