我尝试在Spring Boot应用程序中执行以下操作:创建一个本机查询并对其进行分页,以便它可以从@RestController返回具有给定数量元素的页面。
下面是我的代码片段,其中em是@PersistanceContext存储库,存储库方法如下,因为知道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 of size参数的内容。
有没有人遇到过同样的问题,可以给出一个关于如何对nativeQuery进行分页的有效示例?
谢谢你的帮忙
发布于 2019-12-12 16:15:52
您将Spring Data JPA (可分页)与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;发布于 2019-12-12 05:38:13
以下是将原生查询与分页一起使用的示例:
@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));发布于 2019-12-12 16:05:48
按如下方式修改您的代码
Query searchQuery = em.createNativeQuery(this.queryString, MyEntity.class)
.setFirstResult(pageable.getPageNumber() * pageable.getPageSize())
.setMaxResults(pageable.getPageSize());https://stackoverflow.com/questions/59294194
复制相似问题