问题描述
请考虑以下实体。
PS:该模型具有更多字段,但为简短起见,我只发布了相关字段
Class Employee {
private String name;
private String country;
private String region;
private String department
@OnetoMany
private Set<Skill> skills;
}
Class Skill {
private name;
}
我正在使用Spring Boot规范API来过滤区域,国家等不同领域的员工。
public class EmployeeSpec implements Specification<Employee> {
@Override
public Predicate toPredicate(Root<Employee> root,CriteriaQuery<?> cq,CriteriaBuilder cb) {
String fielName = //some field name
String fieldValue = //some field value
switch (fielName ) {
case "country":
return cb.equal(root.get("country"),fieldValue);
case "department":
return cb.equal(root.get("department"),fieldValue);
case "region":
return cb.equal(root.get("region"),fieldValue);
}
}
我想对结果进行排序,以使具有最高技能的员工排在首位。我不确定如何使用规范来实现这一点。
解决方法
您可以使用CriteriaBuilder.size(..)
。对于您的情况,代码如下所示:
cq.orderBy(cb.desc(cb.size(root.get("skills"))));