【发布时间】:2017-03-01 07:40:58
【问题描述】:
我正在尝试使用 JPA Critera API 连接 3 个表,并将结果作为关系表以外的类型列表获取。
实体是:
| Employee | | Contract | | Company |
|----------| |----------| |---------|
| id | | Company | | id |
| age | | Employee | | name |
- 合同是公司与员工之间的关系
- 一名员工可能属于一家或多家公司
- 一家公司有一名或多名员工
我现在尝试让为 A 公司工作的所有员工都像这样:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Contract> query = cb.createQuery(Contract.class);
Root<Contract> contracts = query.from(Contract.class);
Join<Contract, Company> companyJoin = contracts.join("company");
Join<Contract, Employee> employeeJoin = contracts.join("employee");
List<Predicate> conditions = new ArrayList<Predicate>();
conditions.add(cb.equal(companyJoin.get("name"), "Company A"));
TypedQuery<Practice> typedQuery = em.createQuery(query
.select(contracts)
.where(conditions.toArray(new Predicate[conditions.size()]))
);
typedQuery.getResultList();
这给了我一份与在“A 公司”工作的员工签订的合同列表。
如何编写查询以获取员工列表而不是合同?
【问题讨论】:
-
为什么不使用 JPQL?
标签: java jpa criteria-api