【发布时间】:2021-03-11 03:16:21
【问题描述】:
考虑以下实体 -
class Team {
private String name;
@OneToMany
private Set<Employee> employees;
}
class Employee {
private String name;
@OneToMany
private Set<Skill> skills;
}
class Skill {
private String name;
private boolean active;
private Date expiryDate;
}
我需要对 Teams 结果集进行排序,以使具有最大活跃和未过期技能的团队排在第一位。我正在使用 spring boot Specification & CriteriaQuery 来过滤不同领域的团队。到目前为止,我的以下代码无法按预期工作。
public class TeamSpecs implements Specification<Team> {
@Override
public Predicate toPredicate(Root<Team> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
Order o = cb.desc(cb.sum(cb.size(root.join("employees").get("skills")));
cq.orderBy(o));
return cb.like(cb.equal(root.get("name"), "%" + value + "%"));
}
}
我在这里缺少什么吗?请建议
【问题讨论】:
-
您面临的问题是什么?有什么例外吗?
-
@GovindaSakare - 我在尝试提取特定团队的总技能时收到以下错误原因:java.sql.SQLException:ORDER BY 的表达式 #1 包含聚合函数并适用于结果在 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) 在 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) 在 com 的非聚合查询.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
标签: java spring-boot spring-mvc spring-data-jpa criteriaquery