Spring Data JPA - 左连接多个条件

问题描述

我需要使用 Spring Data JPA 条件构建器使用 JOIN TABLE ON ... AND ... 进行连接。

我知道我可以像这样进行基本的连接:

Join<ReportEntity,ProductEntity> productJoin = root.join("products",JoinType.LEFT);

但是我可以为连接指定额外的条件吗?如果没有,是否有另一种方法可以使用 Criteria Builder 实现这一目标?这是我想重现的 sql 查询

SELECT r.id,p.rare
FROM REPORT r
LEFT JOIN PRODUCT p
     ON r.id = p.report_id AND p.rare = 1
WHERE p.report_id IS NULL;

请注意,在上述查询中的 p.rare = 1 子句中指定 WHERE 不会给出想要的结果,它需要进入 ON 子句中。

解决方法

Join<ReportEntity,ProductEntity> productJoin = root.join("products",JoinType.LEFT);

Predicate joinPredicate = criteriaBuilder.equal(root.get("id"),productJoin.get("reportId"));
Predicate rarePredicate = criteriaBuilder.equal(productJoin.get("rare"),1);

productJoin.on(joinPredicate,rarePredicate);