首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring JPA -如何使用NativeQuery创建可分页的页面?

问Spring JPA -如何使用NativeQuery创建可分页的页面?
EN

Stack Overflow用户
提问于 2019-12-12 05:15:08
回答 3查看 2K关注 0票数 3

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

下面是我的代码片段,其中em是@PersistanceContext存储库,存储库方法如下,因为知道queryString是原生查询:

代码语言:javascript
复制
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进行分页的有效示例?

谢谢你的帮忙

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-12-12 16:15:52

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-12-12 05:38:13

以下是将原生查询与分页一起使用的示例:

代码语言:javascript
复制
@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)

然后你可以这样调用它:

代码语言:javascript
复制
getAllCustomerToShop(shopId,"status",PageRequest.of(index, PAGE_SIZE));
票数 2
EN

Stack Overflow用户

发布于 2019-12-12 16:05:48

按如下方式修改您的代码

代码语言:javascript
复制
Query searchQuery = em.createNativeQuery(this.queryString, MyEntity.class)
                    .setFirstResult(pageable.getPageNumber() * pageable.getPageSize())
                    .setMaxResults(pageable.getPageSize());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59294194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档