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