【问题标题】:Spring JPA - How to create a Pageable with a NativeQuery?Spring JPA - 如何使用 NativeQuery 创建可分页?
【发布时间】:2020-04-05 05:33:17
【问题描述】:

我尝试在 Spring Boot 应用程序中执行以下操作:创建一个本机查询并对其进行分页,以便它可以从 @RestController 返回一个包含给定数量元素的页面。

这是我的代码的 sn-p,其中 em 是 @PersistanceContext EntityManager,存储库方法如下,知道 queryString 是本机查询:

Query searchQuery = em.createNativeQuery(this.queryString, MyEntity.class);
List<MyEntity> resultsList = searchQuery.getResultList();
return new PageImpl<>(resultsList, PageRequest.of(index,size), resultsList.size());

我的问题是返回的页面有完整查询结果的内容,而不是PageRequest.of中size参数的内容。

有没有人遇到过同样的问题,请给出一个关于如何对 nativeQuery 进行分页的工作示例?

感谢您的帮助

【问题讨论】:

    标签: spring jpa nativequery pageable


    【解决方案1】:

    您正在将 Spring Data JPA (Pageable) 与 JPA EntityManager 混合使用。你不能那样做。如果您已经在使用本机查询,那么只需将分页放入查询中。您可以使用您的数据库支持的内容,例如标准:

    SELECT [a_bunch_of_columns] 
      FROM dbo.[some_table]
      ORDER BY [some_column_or_columns] 
      OFFSET @PageSize * (@PageNumber - 1) ROWS
      FETCH NEXT @PageSize ROWS ONLY;
    

    【讨论】:

      【解决方案2】:

      这是使用带有分页的本机查询的示例:

      @Query("SELECT c FROM Customer As c INNER JOIN Offer as f  on f.id=c.specialOffer.id  inner join User As u on u.id=f.user.id where u.id=?1 And c.status=?2")  
      Page<Customer> getAllCustomerToShop(Integer shopId,String status,Pageable pageable)
      

      然后你可以这样称呼它:

      getAllCustomerToShop(shopId,"status",PageRequest.of(index, PAGE_SIZE));
      

      【讨论】:

      • 感谢您的提议,但这不是我真正要实现的目标。我的查询是基于许多输入动态构建的,这些输入具有在执行前绑定的动态数量的参数。不能使用@Query 注解。
      【解决方案3】:

      如下修改你的代码

      Query searchQuery = em.createNativeQuery(this.queryString, MyEntity.class)
                          .setFirstResult(pageable.getPageNumber() * pageable.getPageSize())
                          .setMaxResults(pageable.getPageSize());
      

      【讨论】:

      • 小心第一个结果。您的解决方案将无法正常工作,因为它将返回下一页而不是请求的页面。
      猜你喜欢
      • 2019-10-03
      • 2017-04-04
      • 2016-12-01
      • 1970-01-01
      • 2019-01-27
      • 2018-05-20
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      相关资源
      最近更新 更多