2013-08-18 78 views
0

是否有可能在我的最终查询结果集中使用查询结果作为列使用Multiselect?JPA CriteriaBuilder - 选择计数使用多选(*)

例如:

查询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(); 

任何帮助,高度赞赏?

回答

0

刚刚才知道在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查询作为元组来实现(多选) 。 如果你们有更好的主意,请在此分享。感谢和愉快的编码。