内部联接,当它应该留在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")

并且我意识到我只得到其中";Vendoor";在场。我使用spring.jpa.show sql=true属性来检查发生了什么,我意识到查询正在为SELECT STATION中的每个属性创建内部联接

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 

正如您在第一部分中看到的,我有一个来自Vendoor内部联接,这使得查询出错。

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

如果理解清楚

@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")

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

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

最新更新