spring data jpa limit pagesize,如何设置为maxSize

新手上路,请多包涵

我有一个要求是按可分页和不可分页进行搜索,

在我的 Java 代码中,我使用 spring data jpa Pageable 类,

  Pageable pageable = new PageRequest(
                    queryForm.getPageNumber()- 1, queryForm.getPageSize(),Sort.Direction.ASC,"id");
Page page = repository.fullTextSearch(queryForm.getText(), pageable);

而且我不想改变回报结构,

那么当不可分页的情况下(搜索所有),如何将 pageSize 值设置为 MAX ?

原文由 Awakening 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

结合 Spring MVC,您可以使用 PageableDefaults 注释和 value = Integer.MAX_VALUE 就像

public String showUsers(Model model,
  @PageableDefaults(pageNumber = 0, value = Integer.MAX_VALUE) Pageable pageable) { … }

请参阅 PageableDefaults 注释 Javadoc。

在任何其他客户端代码中,您可以将第二个构造函数参数设置为 Integer.MAX_VALUE

 new PageRequest(
    queryForm.getPageNumber()- 1,
    queryForm.getPageSize() == null ? Integer.MAX_VALUE : queryForm.getPageSize(),
    Sort.Direction.ASC,"id");

请参阅 PageRequest 构造函数。我假设 queryForm.getPageSize() 是包装器类型而不是原始类型。否则,如果 pageSize 不是由用户设置的(有意用于“搜索所有”请求),您将得到一个零。

更新:

从 Spring Data Commons 1.6 开始,您应该使用 PageableDefault 而不是 PageableDefaults

 public String showUsers(Model model,
    @PageableDefault(page= 2 ,value = Integer.MAX_VALUE)

请参阅 PageableDefault 注释 Javadoc。

原文由 ksokol 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您使用 Spring MVC,这可能会对您有所帮助。根据下面的评论,这个答案对于 Spring 4.xx 是完全正确的,也许更早,但对于 Spring 5.xx,您可能需要另一个解决方案。

您要做的第一件事是使用 @PageableDefault 注释并将大小设置为 Integer.MAX_VALUE 或您想要的任何其他值:

 public SomeResponseObject getSomething(
    @PageableDefault(size = Integer.MAX_VALUE) Pageable page
) {
    return someService.getSomething(page);
}

但是当你的大小值非常大时(在 Spring Data Core/spring-data-commons 中大于 2000 1.12.3 ),这是不够的,因为大小仍然受限于 maxPageSize 变量在 PageableHandlerMethodArgumentResolver 类中,默认设置为 2000。pdorgambide 提到了这一点。你会得到这样的东西:

由于默认的 maxPageSize,响应大小限制为 2000

如您所见,有 size=2000 而不是预期的 size=2147483647 (size=Integer.MAX_VALUE)。

所以第二步是更改提到的 maxPageSize 。我们可以通过重写 PageableHandlerMethodArgumentResolver 来实现。其中一种方法是在适当的包中创建适当的 java 配置文件 - 如果您在项目中使用此类配置。如果您的项目使用这样的配置文件,您也可以在 xml 配置文件中执行此操作。有我的解决方案(Java Spring 配置文件):

 @Configuration
@EnableConfigurationProperties
public class PaginationConfiguration extends SpringDataWebConfiguration {

    @Bean
    public PageableHandlerMethodArgumentResolver pageableResolver() {
        PageableHandlerMethodArgumentResolver pageableHandlerMethodArgumentResolver =
            new PageableHandlerMethodArgumentResolver(sortResolver());

        pageableHandlerMethodArgumentResolver.setMaxPageSize(Integer.MAX_VALUE);

        return pageableHandlerMethodArgumentResolver;
    }

}

现在一切都按预期工作:

适当大小的响应等于 Integer.MAX_VALUE,即 2147483647

还值得一提的是 @PageableDefault 注释 value 相当于 size 。换句话说,它是 size 的别名。这意味着代替 size=Integer.MAX_VALUE 你可以写 value=Integer.MAX_VALUE 。更重要的是,您可以同时使用两者是没有意义的。如果它们仅不同 size 被考虑在内。

原文由 luke 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题