问题描述
我需要使用 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);