繁体   English   中英

应该离开的时候加入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属性来检查发生了什么,我意识到查询正在为SELECT STATEMENT中的每个属性创建一个内部联接

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 

正如您在第一部分中看到的那样,我有一个来自Vendedor内部连接,这使得查询错误。

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

如果理解清楚

@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商。

如果我没看错,您就是在定义自己的查询。 因此,您可以在查询中编辑 JOIN 并改写 LEFT JOIN。 我对你的意图是否正确?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM