如何在Spring Data JPA中将最后一页设为默认页

3

我有一个应用程序,可以显示一些评论。现在我想按照创建时间升序排序评论,但默认情况下我想显示最新的评论。

我是这样做的:

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

现在我只能默认获取第一页,我该如何才能默认获取最后一页?


为什么不能按降序排序并取第一页呢? - manish
因为我们想要按创建时间升序排序评论。大多数情况下,我们从第一个到最后一个阅读评论,有时我们想直接查看最后一页。 - xierui
然后,将排序顺序也传递给该方法。通过您接受的答案,您正在运行两个单独的查询,而如果您按降序排序并取第一页,只需一个查询即可完成。 - manish
如果我总共有15条评论,而页面大小为10。第一页的大小为10,最后一页的大小为5。如果我只按降序排序并取第一页,我将得到最后一页,其中有10条评论。显然我不想要那个。 - xierui
2个回答

0
一个更简单的替代方案是简单地反转查询顺序(更改“order by”子句),并仅返回结果的第一页。假定您已经建立了支持排序的索引,这种方法也可能更有效。

0

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. 跳转到最后一页.

客户端排序 + Hibernate 分页?

参考: Spring Data JPA,如何通过 Pageable 获取最后一页


有许多对象想要做到这一点,例如讨论、教程和其他一些东西。是否有任何通用的方法来解决这个问题? - xierui

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接