【问题标题】:JPA CriteriaBuilder - Use of Multiselect with select count(*)JPA CriteriaBuilder - 使用带有选择计数的多选(*)
【发布时间】:2013-08-18 09:28:07
【问题描述】:

是否可以通过 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();

非常感谢任何帮助?

【问题讨论】:

    标签: hibernate jpa nhibernate-criteria


    【解决方案1】:

    刚刚知道子查询在 Select 语句中是不可能的。

    根据 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 查询作为元组(多选)很容易实现。 如果你们有更好的想法,请在这里分享。谢谢,编码愉快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 2019-10-30
      • 2019-07-17
      相关资源
      最近更新 更多