2013-08-18 45 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查詢作爲元組來實現(多選) 。 如果你們有更好的主意,請在此分享。感謝和愉快的編碼。