Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

JPQL Distinct com Fetch

Na aula o professor falou que esta jpql:

select distinct c from Conta c left join fetch c.movimentacoes

Faria o "distinct" mas como isso é possivel se a query resultante desta JPQL é esta:

select
        distinct conta0_.id as id1_2_0_,
        movimentac1_.id as id1_3_1_,
        conta0_.agencia as agencia2_2_0_,
        conta0_.banco as banco3_2_0_,
        conta0_.numero as numero4_2_0_,
        conta0_.titular as titular5_2_0_,
        movimentac1_.conta_id as conta_id6_3_1_,
        movimentac1_.data as data2_3_1_,
        movimentac1_.descricao as descrica3_3_1_,
        movimentac1_.tipo as tipo4_3_1_,
        movimentac1_.valor as valor5_3_1_,
        movimentac1_.conta_id as conta_id6_3_0__,
        movimentac1_.id as id1_3_0__ 
    from
        Conta conta0_ 
    left outer join
        Movimentacao movimentac1_ 
            on conta0_.id=movimentac1_.conta_id

Se reparar bem os campos retornados, vem com todos os campos! o distinct não traria somente as contas sem repetir, ai fiquei na dúvida sobre o que o professor falou, que usando o "distinct" não daria o produto cartesiano!!! como não???

7 respostas

O hibernate faz na memoria :(.

¬¬ Fala serio! Então é fake a query que ele mostra? rs

Opa, nao. Ele manda o distinct no id da conta e usa isso para juntar com as movimentações corretas. Repara que realmente não tem como ele fazer tudo pela query, pq não deixa de ser um Join.

Quando tiver no note, eu executo a query e mostro aqui direitinho.

Vlw Alberto!!!

solução!

Opa David, é isso mesmo que eu falei... o distinct, nessa query, não tem nenhum efeito. Pq cada linha é diferente da outra... o que ele fez é pegar o resultado e juntar em memória mesmo...

Se você parar e ver diretinho, chega a conclusão que não tem muito jeito mesmo...

Entendi vlw em Alberto vc é o kra kkkk