我有这个弹簧数据存储库方法
public FileActivity findTopByFileIDOrderByCreatedDesc(String fileID);
这工作正常.但是我如何使它适用于参数列表?
这不起作用(我可以有很多文件 ID 的文件活动 - 但我只想要最后一个):
public List<FileActivity> findTopByFileIDOrderByCreatedDesc(List<String> fileIDs);
Spring Data 对派生查询的支持很有用,但对于简单查询以外的任何内容,定义自己的 JPQL 查询可能更容易、更清晰。
@Query("select f from File f where f.id in :fileIds order by f.created desc")
public Page<FileActivity> findTopFilesById(
@Param("fileIDs") List<String> fileIDs, Pageable pageable);
由于JPQL没有限制关键字,因此您可以简单地传入页面。
List<String> fileIds = //;
Page<File> page = repository.findTopFilesById(fileIds, new PageRequest(0, fileIds.size());
List<File> files = page.getContent();
您还可以在PageRequest中动态指定排序顺序,而不是在JPQL中,从而提供更大的灵活性:
https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/domain/PageRequest.html
public FileActivity findTopByFileIDInOrderByCreatedDesc(Collection<String> fileIDs);
在此处查看更多示例
注意 - 如果您使用"顶部",那么您只会获得一条记录。要获得多个记录,您必须在"Top"中添加一个数字,例如:"Top10"。
更多信息在这里