Java SeedStack存储库中的分页
在我的Java项目中,使用SeedStack,我使用如下规范查询从聚合中检索数据: 更新:代码示例已修复,以显示正确的返回类型方法 为了避免潜在的内存不足错误,我想使用分页来分割在某些存储库查询中检索到的数据 此外,我想使用一些非常类似于字符串数据存储库中现有的分页特性的东西。我希望保留结果的一些元素,而不是全部,并按页面处理它们,而不将所有数据结果保留在一个集合中 春季分页和排序: 但是,我阅读了SeedStack文档,没有发现这个特性 SeedStack中的存储库:Java SeedStack存储库中的分页,java,jpa,pagination,out-of-memory,seedstack,Java,Jpa,Pagination,Out Of Memory,Seedstack,在我的Java项目中,使用SeedStack,我使用如下规范查询从聚合中检索数据: 更新:代码示例已修复,以显示正确的返回类型方法 为了避免潜在的内存不足错误,我想使用分页来分割在某些存储库查询中检索到的数据 此外,我想使用一些非常类似于字符串数据存储库中现有的分页特性的东西。我希望保留结果的一些元素,而不是全部,并按页面处理它们,而不将所有数据结果保留在一个集合中 春季分页和排序: 但是,我阅读了SeedStack文档,没有发现这个特性 SeedStack中的存储库: 因此,我想知道使用See
因此,我想知道使用SeedStack对查询结果分页的最佳方式是什么。SeedStack提供了以几种不同方式进行分页的帮助,但遗憾的是,在这方面缺乏文档 在我们详细讨论之前,请注意,您应该返回一个流而不是列表,因为存储库的get方法返回一个流 使用SeedStack进行分页的主要方法是使用存储库顶部的which插件来提供分页 示例1直接对流进行分页: 公共类资源{ @注入 私人翻页人翻页人; @注入 私有产品存储库产品存储库; @注入 私人水槽组装工水槽组装工; 公开无效法{ Page Page=paginator.paginateproductRepository.DiscontractedProducts .byPage1 .尺寸10 全部的 } } 示例2使用规范对存储库进行分页: 公共类资源{ @注入 私人翻页人翻页人; @注入 私有产品存储库产品存储库; @注入 专用规范生成器规范生成器; 公开无效法{ Page Page=paginator.paginateproductRepository .byPage1 .尺寸10 .matchingspecificationBuilder.of Product.class .propertydiscontinued.equalotrue 建筑 } } 示例3在混合中添加DTO映射: 公共类资源{ @注入 私人翻页人翻页人; @注入 私有产品存储库产品存储库; @注入 专用规范生成器规范生成器; @注入 私人水槽组装工水槽组装工; 公开无效法{ 第页=fluentAssembler.assemble paginator.paginateproductRepository .byPage1 .尺寸10 .matchingspecificationBuilder.of Product.class .propertydiscontinued.equalotrue 建筑 .toPageOfProductDto.class } } 在最后一个示例中,SeedStack将: 将分页谓词添加到自定义规范中, 将生成的规范转换为正确的持久性查询, 获取数据并将其放入页面中, 使用正确的汇编程序将域聚合页转换为DTO页。 请注意,如果要反复使用同一规范,将其转换为类似DiscontractedProductSpec的类或在存储库中创建一个方法以类似于BuildDiscontractedProductSpec的方式构建它可能会很有用
还有其他几种方法可以组合这些工具,请查看的Javadoc和。您还可以查看以获取更多示例。事实上,DiscontractedProducts返回的是流,而不是列表。然后,我要去修理它。然而,我从SeedStack存储库文档中获取了这个示例,以解释我的问题,而不使用我的应用程序的post代码。所以,我认为可能文档也应该被修复。否则,这个答案真的很有用,我将检查Javadoc以决定如何在我的应用程序中分页。谢谢你发现了这个错误!
public interface ProductRepository extends Repository<Product, ProductId> {
default Stream<Product> discontinuedProducts() {
return get(getSpecificationBuilder().of(Product.class)
.property("discontinued").equalTo(true)
.build()
);
}
}