我对Postgres数据库的JPA应用程序有以下查询:
@Query("SELECT c FROM Cacl c WHERE c.name LIKE 'caclId%'")
public Page<Cacl> getCaclIdStartsWith(@Param("caclId") String caclId);
当我启动应用程序时,我得到以下异常:
Error creating bean with name 'caclRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Paging query needs to have a Pageable parameter! Offending method public abstract org.springframework.data.domain.Page .repositories.CaclReposit...(I'm masking here on purpose)... ory.getCaclIdStartsWith(java.lang.String)
暗示结果不会返回多个记录。然而,它应该返回多个记录。实际上,当我运行SQL等效查询时:
SELECT * FROM TBL_CACL WHERE NAME LIKE 'SOME_CACL%';
,它工作得很好,并返回我所期望的多行。我假设我做错了我的语法,但不确定是什么。感谢任何见解。由于
您的异常显式地表示:java.lang. lang。分页查询需要有一个可分页参数!
所以,你应该这样修改方法签名:
@Query("SELECT c FROM Cacl c WHERE c.name LIKE :caclId || '%'")
public Page<Cacl> getCaclIdStartsWith(@Param("caclId") String caclId, Pageable pageable);
,然后以页大小为20的方式访问Cacl
的第二页,您可以执行以下操作:
Page<Cacl> cacls = repository.getCaclIdStartsWith("test", PageRequest.of(1, 20));
请参阅文档的这一部分。