我们如何使用规范写下面的查询
b main.c:12
command 1
b main.c:10
disable 1
end
使用规范时,即使在multiselect中提到了它,也不会选择count()。
任何想法,当我们使用JPA findAll 方法时如何在规格中包括计数列。
尝试了多次选择,但是当它传递给规范时,它仅对未聚合的列进行查询。
SELECT e.id, e.name, count(e.id)
FROM Employee e INNER JOIN Department d
WHERE e.id = d.empId;
但是它会生成查询:
Expression<Long> countExp = cb.count(root.get("id"));
CriteriaQuery<Employee> select =
criteriaQuery.multiselect(root.get("id"), root.get("name"), countExp);
似乎与以下问题相同: JpaSpecificationExecutor : complex queries with specifications
答案 0 :(得分:0)
为解决上述问题,创建了自己的JPARepository实现并从SimpleJpaRepository覆盖getQuery方法
private TypedQuery<Employee> getQuery(Specification<Employee> spec, Sort sort) {
CriteriaBuilder builder = this.em.getCriteriaBuilder();
CriteriaQuery<Employee> query = builder.createQuery(Employee.class);
Root<Employee> root = this.applySpecificationToCriteria(spec, query);
query.multiselect(root.get("id"), root.get("name"),
builder.count(root.get("id")).alias("count"));
if (sort != null) {
query.orderBy(QueryUtils.toOrders(sort, root, builder));
}
return this.em.createQuery(query);
}