如何翻转子句'on'自连接多对多的内部连接



我有一个与自己相关的实体

@OrderBy("ordenacao ASC")
@JoinTable(name = "funcionarios_has_funcionarios", joinColumns = @JoinColumn(name = "FUNCIONARIOS_ID"), inverseJoinColumns = @JoinColumn(name = "FUNCIONARIOS_ID1"))
@ManyToMany(cascade = { PERSIST, MERGE })
public List<Funcionarios> getFuncionariosId1s() {
    return funcionariosId1s;
}

我有这个sql来运行

"SELECT  f.id,f.nome, COALESCE (SUM(flp.litros * flp.valor),0) as total, "
                + "(select COALESCE (SUM(v.valor),0) from Vales as v where v.funcionario = f and v.status = 'PENDENTE') as vales, "
                + "(select COALESCE (SUM(c.valor),0) from Convenio as c where c.funcionarios = f  and c.statusconveniado = 'PENDENTE') as convenios "
                + "FROM Fornecimentoleiteprodutor as flp "
                + "INNER JOIN flp.produtor as f "
                + "INNER JOIN f.funcionariosId1s as mp "
                + "where mp.id= 2"
                + "GROUP BY f",`

她在java中的表现就是

`select
        funcionari1_.ID as col_0_0_,
        funcionari1_.NOME as col_1_0_,
        coalesce(sum(fornecimen0_.LITROS*fornecimen0_.VALOR),
        0) as col_2_0_,
        (select
            coalesce(sum(vales4_.VALOR),
            0) 
        from
            vales vales4_,
            funcionarios funcionari5_ 
        where
            vales4_.FUNCIONARIOS_ID=funcionari5_.ID 
            and vales4_.FUNCIONARIOS_ID=funcionari1_.ID 
            and vales4_.STATUS='PENDENTE') as col_3_0_,
        (select
            coalesce(sum(convenio6_.VALOR),
            0) 
        from
            convenio convenio6_,
            funcionarios funcionari7_ 
        where
            convenio6_.FUNCIONARIOS_ID=funcionari7_.ID 
            and convenio6_.FUNCIONARIOS_ID=funcionari1_.ID 
            and convenio6_.STATUSCONVENIADO='PENDENTE') as col_4_0_ 
    from
        fornecimentoleiteprodutor fornecimen0_ 
    inner join
        funcionarios funcionari1_ 
            on fornecimen0_.PRODUTOR_ID=funcionari1_.ID 
    inner join
        funcionarios_has_funcionarios funcionari2_ 
            on funcionari1_.ID=funcionari2_.FUNCIONARIOS_ID 
    inner join
        funcionarios funcionari3_ 
            on funcionari2_.FUNCIONARIOS_ID1=funcionari3_.ID 
    where
        funcionari3_.ID=2 
    group by
        funcionari1_.ID`

但是我需要第二个内部联接上的子句不同,这样

inner join
        funcionarios_has_funcionarios funcionari2_ 
            on funcionari1_.ID=funcionari2_.FUNCIONARIOS_ID1

我需要"on"与连接表的第二列相关我该如何解决这个问题

如果您想控制内部联接,请提供自己的ON子句。

目前,Hibernate正在根据自己的假设生成自己的ON子句。

最新更新