当前位置: 首页 > 知识库问答 >
问题:

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

滕璞瑜
2023-03-14

我想通过添加order by params来扩展这个规范。

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, 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()));
            }
            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);
    }

我找不到解决办法如何实施这一点。你能给我一些建议吗?

共有1个答案

黎震博
2023-03-14

您是否在询问如何使用sortby列表来指定排序顺序?以下措施应起作用:

query.orderBy(sortyBy.stream()
    .map(root::get)
    .map(cb::desc)
    .toList());

您还可以通过sort查询参数(例如sort=name,asc&sort=type,desc&sort=listaquoteing.perc_ing,desc)将排序顺序传递给pageable,并轻松地将其调整为Criteria API,请参见下面的答案。

 类似资料:
  • 我正在使用Spring Boot webflow和Spring data reactive mongob。我有一个用@Document注释的用户类,它实现了User细节。问题是我有一个带有@Indux(唯一=true)的字段。当应用程序启动时,即使在数据库上创建索引,它也会抛出下面的错误。 以下是课程: 错误: 谢谢你的帮助。

  • 我有搜索输入以及下拉存储为li元素。如何向搜索标签添加自动完成功能,从li标签获取数据,并在搜索输入中显示相应的结果。 自动完成程序应从ul li标签中提取内容并执行操作。可以通过li搜索输入标签完成吗?

  • 我找到了这个项目https://github.com/OAI/OpenAPI-Specification据我所知,我们可以用文件。而且,我能看到http://editor.swagger.io/它可以被渲染成文件。 我的问题是-我怎么能生成静态页面从文件?有任何教程的Spring引导应用程序吗?我应该以某种方式设置文件昂首阔步的配置和获得文件留档?

  • 我有一个lucene查询,可以对索引字段进行全文搜索。我想将日期范围添加到此查询。 我找到了这个问题并在那里使用了答案:如何在日期之间搜索(Hibernate搜索)? 但当我想在两个日期之间获取数据时,它什么也不返回。我使用的是MSSQL数据库,日期字段的类型是datetime。但它在实体类中被注释为。 这是我的实体类: 这就是我进行全文搜索的地方: 有两种不同的查询。一个是在指定字段上进行全文通

  • 问题内容: 用Python的方式搜索或操作排序序列是什么? 问题答案: 是标准库的一部分-您正在寻找这种东西吗?

  • 我一直试图找到解决办法,但没能找到。 Woocommerce在创建订单时保存客户IP地址。 但是,无法通过IP地址搜索订单。 如何将此功能添加到商业订单搜索?