【发布时间】: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 排序
【问题讨论】:
我有两张表 Employee 和 Department。我想为以下语句编写 Criteria buider API JPA 查询。
从员工 e 中选择 *
emp_name 在哪里
(SELECT emp_name 来自 d 部门 WHERE d.emp_parentName IN('Ross','shane'))
按 e.emp_name 排序
【问题讨论】:
如果您正在寻找不带连接的条件查询,请使用子查询:
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 是您要过滤的名称列表。
【讨论】: