如何为下面的语句编写条件构建器API JPA查询

时间:2017-03-02 10:05:52

标签: jpa jpa-2.0 jpql openjpa

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

SELECT * FROM Employee e

WHERE emp_name IN

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

ORDER BY e.emp_name

1 个答案:

答案 0 :(得分:0)

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

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”是employee和department类中emp_name列的变量名,emp_parentName是empParentName。 nameList是您要筛选的名称列表。