2

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

どんな助けでも大歓迎ですか?

4

1 に答える 1

1

Select ステートメント内で SubQuery を使用できないことを知りました。

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;

これは、Tuple (Multiselect) として CriteriaBuilder クエリを使用して実装するのが非常に簡単になりました。もっと良いアイデアがあれば、ここで共有してください。ありがとう、幸せなコーディング。

于 2013-08-19T11:23:29.590 に答える