带排序的春季 JPA 规范
2022-09-02 09:46:32
						我正在使用Spring JPA。
更准确地说,我正在使用一个扩展的存储库,因为我需要分页,过滤和排序。JpaRepositoryJpaSpecificationExecutor
现在,我的分页和筛选都工作正常,但我无法让排序也正常工作。
我有些失望地注意到有方法:JpaSpecificationExecutorfindAll()
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()]));
        }
    };      
}
其中 是实例字段,其键是字段名称,值是筛选器值。springFilterMapMap<String,String>
在上面你会看到我试图按姓氏排序,但这似乎没有效果。
我做错了什么;&我如何实现排序以及分页和过滤?