将 orderBy 排序添加到搜索规范中

问题描述

我想通过按参数添加顺序来扩展此规范。

搜索选项 DTO:

public class ProductSearchParams {
    private String title;
    private String type;
    private LocalDateTime publishedAt;
    private String sort;
    private List<String> sortBy;
}

public Page<ProductFullDTO> findProducts(ProductSearchParams params,Pageable pageable) {
        Specification<Product> spec = (root,query,cb) -> {
            List<Predicate> predicates = new ArrayList<>();
            if (params.getTitle() != null) {
                predicates.add(cb.equal(root.get("title"),params.getTitle()));
            }
            if (params.getType() != null) {
                predicates.add(cb.equal(root.get("type"),params.getType()));
            }
            if (params.getPublishedAt() != null) {
                predicates.add(cb.greaterThan(root.get("publishedAt"),params.getPublishedAt()));
            }
            return cb.and(predicates.toArray(new Predicate[predicates.size()]));
        };
        return productService.findAll(spec,pageable).map(productMapper::toFullDTO);
    }

我试过了:

public Page<ProductFullDTO> findProducts(ProductSearchParams params,params.getPublishedAt()));
            }
            if (params.getPublishedAt() != null) {
                predicates.add(cb.greaterThan(root.get("publishedAt"),params.getPublishedAt()));
            }
            query.orderBy(builder.desc((root.join(Prodotto_.listaQuoteIng))
                    .get(QuotaIngrediente_.perc_ing)));

            return cb.and(predicates.toArray(new Predicate[predicates.size()]));
        };
        return productService.findAll(spec,pageable).map(productMapper::toFullDTO);
    }

我找不到如何实现这一点的解决方案。你能告诉我我哪里错了吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)