【问题标题】:Spring Data JPA - Left Join with Multiple CriteriaSpring Data JPA - 具有多个条件的左连接
【发布时间】:2021-04-20 21:56:24
【问题描述】:

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

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

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 子句。

【问题讨论】:

    标签: sql jpa spring-data-jpa criteria-api


    【解决方案1】:
    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);
    

    【讨论】:

      猜你喜欢
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 2018-01-27
      • 2020-09-26
      • 1970-01-01
      • 2014-04-05
      相关资源
      最近更新 更多