【问题标题】:how to write criteria builder API JPA query for below statement如何为以下语句编写标准构建器 API JPA 查询
【发布时间】:2017-07-21 23:56:38
【问题描述】:

我有两张表 Employee 和 Department。我想为以下语句编写 Criteria buider API JPA 查询。

从员工 e 中选择 *

emp_name 在哪里

(SELECT emp_name 来自 d 部门 WHERE d.emp_parentName IN('Ross','shane'))

按 e.emp_name 排序

【问题讨论】:

    标签: jpa jpa-2.0 jpql openjpa


    【解决方案1】:

    如果您正在寻找不带连接的条件查询,请使用子查询:

    CriteriaBuilder criteriaBuilder = entityManger.getCriteriaBuilder();
    CriteriaQuery<Employee> query = criteriaBuilder.createQuery(Employee.class);
    Root<Employee> baseRoot = query.from(Employee.class);
    
    Subquery<Department> subquery = query.subquery(Department.class);
    Root<Department> subroot = subquery.from(Department.class);
    subquery.select(subroot.get("empName"));
    subquery.where(subroot.get("empParentName").in(nameList));
    
    query.where(baseRoot.get("empName").in(subquery));
    query.orderBy(criteriaBuilder.asc(baseRoot.get("empName")));
    List<Employee> result = entityManager.createQuery(query).getResultList();
    

    由于没有添加实体,我假设“empName”是员工和部门类中 emp_name 列的变量名称,而 empParentName 是 emp_parentName。 nameList 是您要过滤的名称列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-16
      • 2021-05-01
      • 2012-12-01
      • 2011-06-12
      • 2021-06-14
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多