JPA CriteriaBuilder - 使用选择计数的多选(*)

时间:2013-08-18 09:28:07

标签: hibernate jpa nhibernate-criteria

是否可以使用Multiselect在我的最终查询结果集中将查询结果用作列?

例如:

查询1:

select EMPLOYEE_NAME name, (Query 2) TOTAL_WORKING_DAYS FROM EMPLOYEE;

查询2:

select COUNT(*) from WORKING_DAYS;

我正在尝试这个:

CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Tuple> criteriaQuery = criteriaBuilder.createTupleQuery();

Root<Employee> employeeRoot = criteriaQuery.from(Employee.class);
Path<String> employeeName = employeeRoot .get(Employee_.employeeName);

criteriaQuery.multiselect(employeeName , ??<This is the place where I am confused> );

List<Tuple> results = em.createQuery(criteriaQuery).getResultList();

非常感谢任何帮助?

1 个答案:

答案 0 :(得分:1)

刚才知道在Select语句中不能使用SubQueries。

根据JPA 2.0规范:

Subqueries may be used in the WHERE or HAVING clauses. 

所以我需要修改我的查询,如下所示:

SELECT 
      EMPLOYEE_NAME name,
      COUNT(*) TOTAL_WORKING_DAYS
FROM EMPLOYEE INNER JOIN WORKING_DAYS ON
      EMPLOYEE.WORKING_DAY = WORKING_DAYS.ID;

现在使用CriteriaBuilder查询作为Tuple(Multiselect)实现这一点非常容易。 如果你们有任何更好的想法,请在这里分享。谢谢,快乐的编码。