应该在 JPA 中加入的时候进行内部加入

Inner join when it should be left join in JPA

我正在使用 JpaRepository 并在我的存储库中创建一个@Query:

这是我的查询:

@Query( "SELECT SUM(p.prima) as prima, p.producto as producto, p.tipoProducto as tipoProducto, p.compania as compania, p.cliente as cliente, p.vendedor as vendedor " +
        "FROM Poliza p " +
        "JOIN Producto pr       ON p.producto=pr " +
        "JOIN TipoProducto tp   ON p.tipoProducto=tp " +
        "JOIN Compania c        ON p.compania=c " +
        "JOIN Cliente cl        ON p.cliente=cl " +
        "LEFT JOIN Vendedor v   ON p.vendedor=v " +
        "WHERE p.comienzo >=?1 " +
        "AND p.comienzo <= ?2 " +
        "GROUP BY p.producto")

我意识到我只得到了“供应商”所在的行。 我使用 spring.jpa.show-sql=true 属性 检查发生了什么,我意识到 query 正在为 SELECT STATEMENT

中的每个 属性 创建一个 inner join
inner join producto producto1_ on (poliza0_.producto=producto1_.id) 
inner join tipo_producto tipoproduc2_ on (poliza0_.tipo_producto=tipoproduc2_.id)
inner join compania compania3_ on (poliza0_.compania=compania3_.id) 
inner join cliente cliente4_ on (poliza0_.cliente=cliente4_.id) 
inner join vendedor vendedor5_ on (poliza0_.vendedor=vendedor5_.id) 

join producto producto6_ on poliza0_.producto=producto6_.id 
join tipo_producto tipoproduc7_ on poliza0_.tipo_producto=tipoproduc7_.id 
join compania compania8_ on poliza0_.compania=compania8_.id 
join cliente cliente9_ on poliza0_.cliente=cliente9_.id 
left join vendedor vendedor10_ on poliza0_.vendedor=vendedor10_.id 

正如您在第一部分中看到的,我有一个来自 Vendedorinner join,这使得查询错误。

我应该如何创建查询以获得预期结果?

如果我没看错的话,您是在定义自己的查询。因此,您可以在查询中编辑 JOIN 并改写 LEFT JOIN。 我的意思对吗?

如果理解清楚

@Query( "SELECT SUM(p.prima) as prima, p.producto as producto, p.tipoProducto as tipoProducto, p.compania as compania, p.cliente as cliente, p.vendedor as vendedor " +
        "FROM Poliza p " +
        "JOIN Producto pr       ON p.producto=pr " +
        "JOIN TipoProducto tp   ON p.tipoProducto=tp " +
        "JOIN Compania c        ON p.compania=c " +
        "JOIN Cliente cl        ON p.cliente=cl " +
        "LEFT JOIN Vendedor v   ON p.vendedor=v " +
        "WHERE p.comienzo >=?1 " +
        "AND p.comienzo <= ?2 " +
        "GROUP BY p.producto")

我认为您可以在 select 字段中使用 v 而不是 p.vendedor as vendedor