JavaSpring存储库自动生成方法:按给定的顶部编号+按字段描述排序选择
Spring版本是2.4.0
我有一个带有Integer totalRacesCount
字段的PlayerEntity
。我需要按照totalRacesCount
desc的顺序排列不同长度的玩家的顶部。顶部大小必须不同
我试图在我的CrudRepository<PlayerEntity, Long>
中添加一个方法来实现这一点
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.limit-query-result-本节说明我们可以传递一个数值top
,以使限制参数化。这是可行的,但只有在不与OrderByTotalRacesCountDesc
结合使用时,也就是说,它适用于Asc
排序
- 没有
top
参数的单个前1条记录的方法正在工作:PlayerEntity findTopByOrderByTotalRacesCountDesc();
-选择具有最大totalRacesCount
的播放器,一切正常李> - 硬编码的前N个记录的方法也起作用:
List<PlayerEntity> findTop25ByOrderByTotalRacesCountDesc();
-返回25个具有最高totalRacesCount
的播放器李> - 但是,当我尝试添加
int top
参数:List<PlayerEntity> findTopByOrderByTotalRacesCountDesc(int top);
时,应用程序启动失败,不需要top
参数:
java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List parser.repository.PlayerRepository.findTopByOrderByTotalRacesCountDesc(int)! At least 1 parameter(s) provided but only 0 parameter(s) present in query.
- 我还尝试在
Top
:List<PlayerEntity> findTopOrderByTotalRacesCountDesc(int top);
之后省略By
,但这显然是一种不正确的语法,无法将Desc
作为属性名:
java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.List parser.PlayerRepository.findTopOrderByTotalRacesCountDesc(int)! No property desc found for type Integer!
我知道我可以实现@Query
并将top
设置为@Param
。但是,是否可以通过方法名自动生成的查询来实现任务该行为实际上看起来像一个bug强>
我发现的所有链接都使用@Query
(JPA或native)来实现order by desc
排序
# 1 楼答案
看起来我没有正确阅读文档:
这实际上并不意味着可以改变的“方法参数”,而只是方法名中
Top
后面的硬编码数字解决方案:我应该使用
setMaxResults