获取 spring 数据中特定项目的页码

Get page number of specific item in spring data rest

我正在使用 spring-data-rest 构建 Web 应用程序。

我想在前端的分页 table 中显示来自大型 db-table 的数据。 table 仅从 API 异步加载当前页面。只需拥有一个像

这样的存储库,就可以开箱即用
public interface KeywordRepository extends JpaRepository<Keyword, String>, QuerydslPredicateExecutor<Keyword> {
}

现在我想实现一个功能,将我的分页 table 跳转到特定项目所在的正确页面。 问题是我不知道该特定项目在哪个页面上。

我需要某种端点根据当前的过滤和排序参数告诉我特定项目的页码(按 ID)。基本上 findPageOfItemById(Long id, Pageable pageable).

我怎样才能得到这个?

由于table比较大,我不想把全部内容都放在内存中。

为了完整起见,我将回答我自己的问题。

它工作得很好,没有按要求将整个列表加载到内存中。 但我仍然希望找到更多 spring-data-resty 答案。

    @GetMapping("/getPositionOfItem/{id}")
    public long getPositionOfItem(@PathVariable String id, @QuerydslPredicate(root = SomeEntity.class) Predicate predicate, Pageable pageable) {
        Iterable<SomeEntity> elements = someEntityRepository.findAll(predicate, pageable.getSort());
        return findFirst(elements.iterator(), id);
    }

    private long findFirst(Iterator<SomeEntity> iterator, String id) {
        long index = 0;
        while (iterator.hasNext()) {
            if (iterator.next().getId().equals(id)) {
                return index;
            }
            index++;
        }
        return -1;
    }

请注意,我计算的是项目的位置。要得到元素的页面,我们需要除以页面大小。