[英]How to combine distinct and sort in spring data jpa specification query with joins
[英]Spring JPA Specification with Sort
我正在使用Spring JPA。
更確切地說,我正在使用擴展JpaRepository
和JpaSpecificationExecutor
的Repository,因為我需要分頁,過濾和排序。
現在我的分頁和過濾都工作得很好,但我也無法進行排序。
我JpaSpecificationExecutor
失望地注意到JpaSpecificationExecutor
有findAll()
方法:
findAll(Specification, Pageable);
findAll(Specification, Sort);
但我需要的那個:
findAll(Specification, Pageable, Sort); //or something like this
不存在!
因此,計划B包括規范中的排序。
在此問題的接受答案的幫助下: 規范中的JpaSpecificationExecutor JOIN + ORDER BY我將以下內容放在一起:
private Specification<MainEntity> matches() {
return new Specification<MainEntity>() {
public Predicate toPredicate(Root<MainEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> predicates = new ArrayList<Predicate>();
//Attempt to sort by Surname, has no effect
query.orderBy(cb.asc(root.get("surname")));
//add string filters
for (String field : stringFilterMap.keySet()) {
String valuePattern = stringFilterMap.get(field);
predicates.add(cb.like(root.get(field), "%"+valuePattern+"%"));
}
//...snip...
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
}
其中springFilterMap
是一個實例字段, Map<String,String>
其鍵是字段名稱和值是過濾器值。
上面你會看到我嘗試按姓氏命令,但這似乎沒有效果。
我究竟做錯了什么; 如何與分頁和過濾一起實現排序?
使用PageRequest ,它是Pageable的一個實現,可以像你想要的那樣一次實現分頁和排序。 例如,通過這個構造函數 :
public PageRequest(int page, int size, Sort sort)
更新:由於春季數據JPA 2.0以上的構造已被廢棄,你應該使用靜態工廠方法的 :
public static PageRequest of(int page, int size, Sort sort)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.