Spring 数据 JPA - 使用多个条件进行左连接

Spring Data JPA - Left Join with Multiple Criteria

我需要使用 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;

请注意,在WHERE子句中指定上述查询中的p.rare = 1并不能给出所需的结果,它需要在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);