HQL - HIBERNATE 4 -Dúvidas

1 resposta
J

Pessoal estou em uma dúvida tremenda aqui.
Exemplo: Noticia(1)—(n)Imagem(1)—(n)TipoImagem
Daí tenho o seguinte HQL

session.createQuery("select n from Noticia as n inner join n.imagem inner join n.imagem.tipoimagem order by n.codigo desc")

No meu entendimento, implicitamente o hibernate vai fazer apenas um select, mas quando olho no catalina.out aparece vários select relacionado a essa consulta ai, pq ele faz esse vários selects ?

Hibernate: 
    select
        noticia0_.codigo as codigo5_,
        noticia0_.codigo_tiponoticia as codigo2_5_,
        noticia0_.corpo as corpo5_,
        noticia0_.cpf_usr as cpf4_5_,
        noticia0_.data as data5_,
        noticia0_.destacada as destacada5_,
        noticia0_.fonte as fonte5_,
        noticia0_.codigo_imagem as codigo11_5_,
        noticia0_.publicada as publicada5_,
        noticia0_.resumo as resumo5_,
        noticia0_.titulo as titulo5_ 
    from
        site.noticia noticia0_ 
    inner join
        public.imagem imagem1_ 
            on noticia0_.codigo_imagem=imagem1_.codigo 
    inner join
        public.imagem imagem2_ 
            on noticia0_.codigo_imagem=imagem2_.codigo 
    inner join
        public.tipoimagem tipoimagem3_ 
            on imagem2_.codigo_tipoimagem=tipoimagem3_.codigo 
    order by
        noticia0_.codigo desc limit ?

Hibernate: 
    select
        imagem0_.codigo as codigo2_1_,
        imagem0_.altura as altura2_1_,
        imagem0_.cpf_usr as cpf3_2_1_,
        imagem0_.fotografo as fotografo2_1_,
        imagem0_.largura as largura2_1_,
        imagem0_.nome as nome2_1_,
        imagem0_.possui_original as possui7_2_1_,
        imagem0_.codigo_tipoimagem as codigo9_2_1_,
        imagem0_.titulo as titulo2_1_,
        tipoimagem1_.codigo as codigo6_0_,
        tipoimagem1_.cpf_usr as cpf2_6_0_,
        tipoimagem1_.descricao as descricao6_0_,
        tipoimagem1_.diretorio as diretorio6_0_,
        tipoimagem1_.publico as publico6_0_ 
    from
        public.imagem imagem0_ 
    left outer join
        public.tipoimagem tipoimagem1_ 
            on imagem0_.codigo_tipoimagem=tipoimagem1_.codigo 
    where
        imagem0_.codigo=?
Hibernate: 
    select
        imagem0_.codigo as codigo2_1_,
        imagem0_.altura as altura2_1_,
        imagem0_.cpf_usr as cpf3_2_1_,
        imagem0_.fotografo as fotografo2_1_,
        imagem0_.largura as largura2_1_,
        imagem0_.nome as nome2_1_,
        imagem0_.possui_original as possui7_2_1_,
        imagem0_.codigo_tipoimagem as codigo9_2_1_,
        imagem0_.titulo as titulo2_1_,
        tipoimagem1_.codigo as codigo6_0_,
        tipoimagem1_.cpf_usr as cpf2_6_0_,
        tipoimagem1_.descricao as descricao6_0_,
        tipoimagem1_.diretorio as diretorio6_0_,
        tipoimagem1_.publico as publico6_0_ 
    from
        public.imagem imagem0_ 
    left outer join
        public.tipoimagem tipoimagem1_ 
            on imagem0_.codigo_tipoimagem=tipoimagem1_.codigo 
    where
        imagem0_.codigo=?
Hibernate: 
    select
        imagem0_.codigo as codigo2_1_,
        imagem0_.altura as altura2_1_,
        imagem0_.cpf_usr as cpf3_2_1_,
        imagem0_.fotografo as fotografo2_1_,
        imagem0_.largura as largura2_1_,
        imagem0_.nome as nome2_1_,
        imagem0_.possui_original as possui7_2_1_,
        imagem0_.codigo_tipoimagem as codigo9_2_1_,
        imagem0_.titulo as titulo2_1_,
        tipoimagem1_.codigo as codigo6_0_,
        tipoimagem1_.cpf_usr as cpf2_6_0_,
        tipoimagem1_.descricao as descricao6_0_,
        tipoimagem1_.diretorio as diretorio6_0_,
        tipoimagem1_.publico as publico6_0_ 
    from
        public.imagem imagem0_ 
    left outer join
        public.tipoimagem tipoimagem1_ 
            on imagem0_.codigo_tipoimagem=tipoimagem1_.codigo 
    where
        imagem0_.codigo=?
Hibernate: 
    select
        imagem0_.codigo as codigo2_1_,
        imagem0_.altura as altura2_1_,
        imagem0_.cpf_usr as cpf3_2_1_,
        imagem0_.fotografo as fotografo2_1_,
        imagem0_.largura as largura2_1_,
        imagem0_.nome as nome2_1_,
        imagem0_.possui_original as possui7_2_1_,
        imagem0_.codigo_tipoimagem as codigo9_2_1_,
        imagem0_.titulo as titulo2_1_,
        tipoimagem1_.codigo as codigo6_0_,
        tipoimagem1_.cpf_usr as cpf2_6_0_,
        tipoimagem1_.descricao as descricao6_0_,
        tipoimagem1_.diretorio as diretorio6_0_,
        tipoimagem1_.publico as publico6_0_ 
    from
        public.imagem imagem0_ 
    left outer join
        public.tipoimagem tipoimagem1_ 
            on imagem0_.codigo_tipoimagem=tipoimagem1_.codigo 
    where
        imagem0_.codigo=?
Hibernate: 
    select
        imagem0_.codigo as codigo2_1_,
        imagem0_.altura as altura2_1_,
        imagem0_.cpf_usr as cpf3_2_1_,
        imagem0_.fotografo as fotografo2_1_,
        imagem0_.largura as largura2_1_,
        imagem0_.nome as nome2_1_,
        imagem0_.possui_original as possui7_2_1_,
        imagem0_.codigo_tipoimagem as codigo9_2_1_,
        imagem0_.titulo as titulo2_1_,
        tipoimagem1_.codigo as codigo6_0_,
        tipoimagem1_.cpf_usr as cpf2_6_0_,
        tipoimagem1_.descricao as descricao6_0_,
        tipoimagem1_.diretorio as diretorio6_0_,
        tipoimagem1_.publico as publico6_0_ 
    from
        public.imagem imagem0_ 
    left outer join
        public.tipoimagem tipoimagem1_ 
            on imagem0_.codigo_tipoimagem=tipoimagem1_.codigo 
    where
        imagem0_.codigo=?

1 Resposta

Hebert_Coelho

tente trocar de inner join para inner join fetch

Criado 1 de junho de 2012
Ultima resposta 1 de jun. de 2012
Respostas 1
Participantes 2