Java 使用Spring Boot跳过分页中的元素

Java 使用Spring Boot跳过分页中的元素,java,spring,spring-boot,pagination,backend,Java,Spring,Spring Boot,Pagination,Backend,我有一个在spring boot中制作的后端应用程序,我想在前端加载关于某个主题的评论,我加载这些经过分页和排序的评论,如果用户只是滚动,并进入下一页,效果很好,但有一个问题,用户也可以发布评论,这些评论会出现在表中,从中我们可以得到分页的评论发送到前端。 问题是,如果我得到两个页面,例如每个页面有10条注释,然后发布一条注释,比如说在第一页元素之间的某个地方,因为注释是排序的,那么插入注释后的所有项目都会移动一个位置,所以第三页的第一条评论将是第二页的最后一个元素,已经发送到前端,我得到了重复

我有一个在spring boot中制作的后端应用程序,我想在前端加载关于某个主题的评论,我加载这些经过分页和排序的评论,如果用户只是滚动,并进入下一页,效果很好,但有一个问题,用户也可以发布评论,这些评论会出现在表中,从中我们可以得到分页的评论发送到前端。 问题是,如果我得到两个页面,例如每个页面有10条注释,然后发布一条注释,比如说在第一页元素之间的某个地方,因为注释是排序的,那么插入注释后的所有项目都会移动一个位置,所以第三页的第一条评论将是第二页的最后一个元素,已经发送到前端,我得到了重复的评论

Pageable Pageable=PageRequest.of(第8页,排序方式(“文本”).ascending())

List commentsPage=commentsRepository.findAllByBookId(bookId,可分页)

@存储库
公共接口评论保留扩展了JPA保留{
列出findAllByBookId(字符串bookId,Pageable Pageable);
}
为了解决这个问题,我想在前端记住添加了多少条评论,当我要求下一页指定它们时,可以跳过这些评论,但我不知道怎么做


我不熟悉java和spring boot,如果有其他解决方案,我愿意听取建议。

U可以使用@CreationTimestamp来找出创建任何注释的时间 然后按升序排序

@CreationTimestamp
 private LocalDateTime createdAt;

Pageable paging = PageRequest.of(pageNo, pageSize, Sort.by("createdAt").ascending());


按时间排序将是一个简单的解决方案。新的评论总是在结尾。按文本排序有什么原因吗?解决此问题的通常方法是使用“延续令牌”而不是偏移量。基本上是指定最后一个项目的ID,而不是使用页码。不确定弹簧是否支持它。您还可以将findAll方法更改为使用时间戳。然后,它将实际上成为一个“findAllBefore”。UI将在初始请求上指定时间,并确保在后续页面请求上发送相同的时间戳。页面加载后添加的任何项目都会被JPA的WHERE子句过滤。@Michael,我按文本对它们进行排序只是为了检查分页是否与排序一起工作,但是是的,注释必须按时间排序。但是如果我只这样做,所有新的注释都会存储在最后,但是当我通过分页到达那里时,我应该怎么做呢?它将返回开始时添加的注释,比如说最后一页,并且这些注释已经在前端。是的,这将一直有效,直到我到达表的末尾,在那里我发现新添加的注释已经在前端,我错了吗?
@CreationTimestamp
 private LocalDateTime createdAt;

Pageable paging = PageRequest.of(pageNo, pageSize, Sort.by("createdAt").ascending());