【问题标题】:How to get last page as default in spring data JPA如何在春季数据JPA中将最后一页作为默认值
【发布时间】:2015-08-14 02:37:01
【问题描述】:

我有一个显示一些 cmets 的应用程序。现在我想按创建时间 asc 对 cme​​ts 进行排序,但我想将最新的 cmets 显示为默认值。

我是这样做的:

public Page<Comment> getComments(@PageableDefault(value = 15, sort = { "createdTime" }, direction = Sort.Direction.ASC) 
    Pageable pageable) {
    return commentRepository.findAll(pageable);
 }

现在只能默认获取第一页,怎么才能默认获取最后一页?

【问题讨论】:

  • 还有,为什么不能按降序排序并取第一页?
  • 因为我们希望评论按 createdTime asc 排序。大多数时候,我们是从头到尾读取cmets,有时我们想直接看到最后一页
  • 然后,将排序顺序也传递给该方法。使用您接受的答案,您将运行两个单独的查询,而如果您按降序排序并获取第一页,则可以只使用一个查询。
  • 如果我总共有 15 个 cmets,页面大小为 10。第一页大小为 10,最后一页大小为 5。如果我只是降序排序并取第一页,我将得到最后一页page.which 有 10 个 cmets。显然我不想那样。

标签: java spring jpa pagination spring-data-jpa


【解决方案1】:

1.设置页面的第一和最大结果。

setFirstResult(int first) ;
setMaxResults(int max) ;

2.计算该表的总页数并除以页面大小

Query query=em.createQuery("SELECT COUNT
(emp.empName) FROM Employee emp");

或者另一种是使用投影

criteria.setProjection(Projections.rowCount());
int rowCount = (Integer) criteria.list().get(0);

3.移至最后一页

Client Side sorting + Hibernate Paging?

参考: Spring Data JPA, how to get the last Page through Pageable

【讨论】:

  • 有很多对象想要这样做,比如讨论教程和其他东西。有什么常见的解决方法吗?
【解决方案2】:

一个更简单的替代方法是颠倒查询的顺序(更改您的“order by”子句)并简单地返回结果的第一页。假设您有一个索引来支持排序顺序,这种方法也可能更有效。

【讨论】:

    猜你喜欢
    • 2016-01-30
    • 2013-11-12
    • 2023-03-31
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 2022-01-12
    • 2018-07-31
    • 2021-07-04
    相关资源
    最近更新 更多