如何解决Spring Boot:Slice/Pageable 未根据页面返回正确的块
在我的 Psql 数据库中,我存储了两个对象,我想在它们单独的页面/切片上检索每个项目。我试图通过传入以下 Page 对象来实现这一点:
PageRequest.of(0,1)
表示第一项,PageRequest.of(1,1)
表示第二项。
然而,当我通过 Pageable
创建 PageRequest.of(1,1)
对象时,这总是导致每次只返回第一项,但我已经通过调用 {{1 }}。
我做错了什么?
我的服务层调用如下所示:
repo.findAll()
我的回购是:
@Transactional
public Slice<Foo> findAllInactive(Pageable pageable) {
return repo.findAllInactive(new Date(),pageable));
}
如果有什么不同,这里是测试调用
@Repository
public interface FooRepository extends JpaRepository<Foo,String> {
value =
"SELECT * FROM fooschema.foo i WHERE i.valid_until < :currentDate OR i.valid_until IS NULL --#pageable\n",nativeQuery = true,countQuery = "SELECT count(*) FROM fooschema.foo i")
Slice<Foo> findAllInactive(@Param("currentDate") Date currentDate,Pageable pageable);
}
和控制器
@Autowired private mockmvc mvc;
@Test
void testStuff() throws Exception {
// two elements added....
ResultActions resultActions =
mvc.perform(
get("/foo")
.param("page","1")
.param("size","1"))// should return the second element,but returns the first
.andExpect(status().isOk())
.andExpect(content().contentType("application/json"));
}
解决方法
您可以尝试使用 Page 对象代替 Slice。
第 1 步 - 创建页面大小
Pageable page1 = PageRequest.of(0,1);
Pageable page2 = PageRequest.of(1,1);
第 2 步
Page <Foo> findAllInactive(Date currentDate,Pageable page2);
,
Anshul 的评论使我走上了正确的轨道,最后,似乎创建派生查询,如此处所述:https://www.baeldung.com/spring-data-derived-queries,有效。
最后,以下内容对我有用:
Slice<Foo> findByValidUntilIsNullOrValidUntilBefore(Date currentDate,Pageable pageable); // or can return a List<Foo>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。