Spring JPA - 如何使用 NativeQuery 创建 Pageable?
Spring JPA - How to create a Pageable with a NativeQuery?
我尝试在 Spring 引导应用程序中执行以下操作:创建一个本机查询并将其分页,以便它可以 returns 来自 @RestController 的给定元素数的页面。
这是我的代码片段,其中 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());
我的问题是返回的Page是完整查询结果的内容,不是PageRequest.of里面的size of size参数的内容。
有没有人遇到同样的问题并且可以给出一个关于如何对 nativeQuery 进行分页的工作示例?
感谢您的帮助
这是使用带分页的本机查询的示例:
@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 searchQuery = em.createNativeQuery(this.queryString, MyEntity.class)
.setFirstResult(pageable.getPageNumber() * pageable.getPageSize())
.setMaxResults(pageable.getPageSize());
您正在将 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;
我尝试在 Spring 引导应用程序中执行以下操作:创建一个本机查询并将其分页,以便它可以 returns 来自 @RestController 的给定元素数的页面。
这是我的代码片段,其中 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());
我的问题是返回的Page是完整查询结果的内容,不是PageRequest.of里面的size of size参数的内容。
有没有人遇到同样的问题并且可以给出一个关于如何对 nativeQuery 进行分页的工作示例?
感谢您的帮助
这是使用带分页的本机查询的示例:
@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 searchQuery = em.createNativeQuery(this.queryString, MyEntity.class)
.setFirstResult(pageable.getPageNumber() * pageable.getPageSize())
.setMaxResults(pageable.getPageSize());
您正在将 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;