假设我们有以下五个数据库表: 员工,客户,月,现场和付款。
给出以下(Oracle)SQL查询:
select * from onsite o
join client c on o.client_id = c.client_id
left join payment p on (o.client_id = p.client_id and o.employee_id = p.employee_id and o.month_cd = p.month_cd)
where p.payout_date is null and c.name = 'example';
它加入了三张桌子。第一个内连接很简单,client_id是Client表中的主键和Onsite中的外键。 假设我们有EmployeeEntity_,ClientEntity_,MonthEntity_,OnsiteEntity_和PaymentEntity_元模型类,它看起来像Criteria API:
EntityManager em = ...;
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<OnsiteEntity> cq = cb.createQuery(OnsiteEntity.class);
Root<OnsiteEntity> root = cq.from(OnsiteEntity.class);
Join<OnsiteEntity, ClientEntity> client = root.join(OnsiteEntity_.client);
Onsite和Payment表都包含三个到Employee,Client和Month表主键的外键。 左连接连接这三个外键上的Onsite和Payment表。
问题是如何使用元模型类表达两个未连接表与JPA Criteria API 的左连接?
答案 0 :(得分:0)
您可以将JoinType.LEFT
用作join
参数(https://en.wikibooks.org/wiki/Java_Persistence/Criteria#JoinType)
root.join(OnsiteEntity_.client, JoinType.LEFT);