使用 spring 引导规范 API 基于计数的排序结果
Order results based on count using spring boot specification API
考虑下面的实体。
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 引导规范 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"))));
考虑下面的实体。
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 引导规范 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"))));