如何为以下语句编写标准构建器 API JPA 查询

Posted

技术标签:

【中文标题】如何为以下语句编写标准构建器 API JPA 查询【英文标题】:how to write criteria builder API JPA query for below statement 【发布时间】: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 排序

【问题讨论】:

【参考方案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 是您要过滤的名称列表。

【讨论】:

以上是关于如何为以下语句编写标准构建器 API JPA 查询的主要内容,如果未能解决你的问题,请参考以下文章

JPA 2.0、标准 API、子查询、表达式中

如何为多个实体编写单个 jpa 规范

JPA 标准 API。使用带参数的 sql 函数调用进行查询

如何为以下 Scenerio 编写 linq 查询 [关闭]

如何为以下描述编写 mongodb 聚合查询

如何为以下查询编写QueryExpression?