spring - 添加 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, 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);
}
我找不到如何实现这一点的解决方案。你能给我建议我哪里错了吗?
解决方案
您是否在问如何使用sortBy
列表来指定排序顺序?以下应该有效:
query.orderBy(sortyBy.stream()
.map(root::get)
.map(cb::desc)
.toList());
您还可以Pageable
通过sort
查询参数(例如sort=name,asc&sort=type,desc&sort=listaQuoteIng.perc_ing,desc
)传递排序顺序并轻松地将其调整为 Criteria API,请参阅此答案。
推荐阅读
- ios - 根据用户选择从数据模型中列出和过滤 - SwiftUI
- excel - 如何从 Excel 中的文本字符串中提取特定数字?
- swift - UITableViewCell 内的 UICollectionView 缓慢滚动
- .net-core - 依赖注入 - .NET Core Windows 窗体
- compilation - 用 openmpi-4.0.5 编译的 Quantum esspresso-6.7.0 问题
- react-native - 如何访问从子到父反应原生的状态变量?
- html - 为什么 CSS 变换会影响站点宽度?
- javascript - Angular - 无法安装 Moment 和 Material Moment 适配器
- sql - 如何将自定义对象附加到 postgres 中的 JSONB 列类型
- php - 使用 PHP 进行 Aweber 集成