Java 如何选择一个子实体,该子实体在多个同一关系中被n个父实体引用?

Java 如何选择一个子实体,该子实体在多个同一关系中被n个父实体引用?,java,hibernate,jpa,Java,Hibernate,Jpa,我有两个实体: @实体 公开课任务{ @身份证 私人长id; @manytone(fetch=FetchType.EAGER) 私人雇员; //…为简洁起见省略 } @实体 公营雇员{ @身份证 私人长id; 私有字符串名称; //…为简洁起见省略 } 现在,我想选择分配给至少minTasks任务的所有员工。 我这样试过: select e.* from employee where ( (select count(e2.id) from task t inner jo

我有两个实体:

@实体
公开课任务{
@身份证
私人长id;
@manytone(fetch=FetchType.EAGER)
私人雇员;
//…为简洁起见省略
}
@实体
公营雇员{
@身份证
私人长id;
私有字符串名称;
//…为简洁起见省略
}
现在,我想选择分配给至少
minTasks
任务的所有员工。 我这样试过:

select e.*
from employee
where (
    (select count(e2.id)
    from task t
    inner join employee e2 on t.employe_id = e2.id
    where e2.id = e.id) > MIN_TASK
);
CriteriaBuilder=session.getCriteriaBuilder();
CriteriaQuery criteria=builder.createQuery(Employee.class);
Root=criteria.from(Task.class);
//Join-Join=root.Join(任务\员工);
//条件。选择(加入);
//标准:分组(加入);
/*标准(
builder.greaterThanOrEqualTo(
建造商计数(连接),
薄荷糖
)
);*/
criteria.select(root.get(Task.EMPLOYEE));
groupBy(root.get(Task.EMPLOYEE));
标准(
builder.greaterThanOrEqualTo(
builder.count(root.get(Task_.EMPLOYEE)),
薄荷糖
)
);
Query Query=session.createQuery(条件);
返回query.getResultList();
此操作失败,并显示以下消息:

Column reference 'Employee_.ID' is invalid, or is part of an invalid expression.  For a SELECT list with a GROUP BY, the columns and expressions being selected may only contain valid grouping expressions and valid aggregate expressions.

但我真的不明白这条信息想告诉我什么。有人能给我指出正确的方向吗?

我将按如下方式重新聚焦查询,因为您必须在group by中拥有与员工实体中的属性一样多的参数:

CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Employee> criteria = builder.createQuery(Employee.class);
Root<Employee> root = criteria.from(Employee.class);

//Subquery to exists
Subquery<Long> numOfTasksSQ= criteria.subquery(Long.class);
Root<Task> rootSQ = numOfTasksSQ.from(Task.class);
Join<Task,Employee> joinSQ = rootSQ.join(Task_.employee,JoinType.INNER);
numOfTasksSQ.select(cb.count(joinSQ.get(Employee_.id)));
numOfTasksSQ.where(cb.equal(joinSQ.get(Employee_.id),root.get(Employee_.id)));

criteria.where(cb.greaterThanOrEqualTo(numOfTasksSQ.getSelection(),MIN_TASK ));

criteria.select(root);