使用top和参数列表

时间:2017-11-09 15:46:58

标签: java spring-data spring-data-jpa

我有这个spring数据存储库方法

public FileActivity findTopByFileIDOrderByCreatedDesc(String fileID);

这很好用。但是如何使其适用于参数列表?

这不起作用(文件ID可以有很多FileActivity - 但我只想要最后一个):

public List<FileActivity> findTopByFileIDOrderByCreatedDesc(List<String> fileIDs);

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

public FileActivity findTopByFileIDInOrderByCreatedDesc(Collection<String> fileIDs);

查看更多示例here

注意 - 如果您使用“Top”,那么您只能获得一条记录。要获得多条记录,您必须在“Top”中添加一个数字,例如:'Top10'。

更多信息here