Página Inicial do Fórum > JEE / EJB

Um Eager não declarado... fetch all properties?



Criar novo tópico   Responder tópico


  1. sakana
    Posts:5


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Viva pessoal,

    Tenho uma entidade Resources com uma relação OneToMany com uma entidade Languages com fetchType = lazy.

    Segundo li aqui:

    http://www.hibernate.org/hib_docs/entitymanager/reference/en/html/queryhql.html

    é possivel fazer um "eager escondido" através da query sql:

    SELECT t FROM Language t fetch all properties WHERE t.languageid = 1

    Mas infelizmente... não foi buscar todos os objectos associados (o que com o fetch type a EAGER funciona).

    Não quero declarar o FetchType a Eager, pensei que esta solução me ia ajudar... Alguem tem alguma ideia do que pode estar mal? Ou o que estou a tentar fazer não é de facto possivel?

    Abraço a todos!




  1. ccllss
    Posts:96


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    sakana
    Viva pessoal,

    Tenho uma entidade Resources com uma relação OneToMany com uma entidade Languages com fetchType = lazy.

    Segundo li aqui:

    http://www.hibernate.org/hib_docs/entitymanager/reference/en/html/queryhql.html

    é possivel fazer um "eager escondido" através da query sql:

    SELECT t FROM Language t fetch all properties WHERE t.languageid = 1

    Mas infelizmente... não foi buscar todos os objectos associados (o que com o fetch type a EAGER funciona).

    Não quero declarar o FetchType a Eager, pensei que esta solução me ia ajudar... Alguem tem alguma ideia do que pode estar mal? Ou o que estou a tentar fazer não é de facto possivel?

    Abraço a todos!



    Sakana,

    É possível fazer isso sim.... Veja exemplo abaixo:

    Query:



    @braços,
    Cleiton
    _________________
    Cleiton Luiz Siqueira
    Bacharel em Ciência da Computação




  1. sakana
    Posts:5


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    A minha ideia é fazer um método genérico que permita fazer isso, ou seja, que não seja preciso o conhecimento das relações oneToMany na altura em que a query é produzida.

    (A query é contruida através de um método que tem como argumentos a class e a primary key.)

    A Solução do Fetch All properties parecia perfeita, só é pena não funcionar como eu pretendo, a sua solução... obriga ao conhecimento da estrutura da entidade envolvida na query...

    Alguem sabe a razão pela qual o fetch all properties não tem o comportamento que eu desejava?




  1. jack_-_ganzha
    Posts:4191


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    sakana
    A Solução do Fetch All properties parecia perfeita, só é pena não funcionar como eu pretendo, a sua solução... obriga ao conhecimento da estrutura da entidade envolvida na query...


    Fetch All properties é uma solução no mínimo perigosa. Imagine a seguinte classe:

    Um fetch all properties vai implicar em um cruzamento que é impraticável mesmo para um conjunto pequeno de dados. Em geral, para relacionamentos *ToMany, não é bom realizar mais do que um join fetch. Minha experiência com o Hibernate é: fuja de métodos muito genéricos que criam consultas e são usados em todo canto. Eles geralmente são um problema.

    valeuz...
    _________________
    Marcos Silva Pereira




  1. sakana
    Posts:5


    Comment Arrow

    Publicado em: 09/04/2009 23:18:44

    Ok Obrigado! Também estou a chegar a conclusão que este método é no minimo perigoso... Vou optar por utilizar um Fetch join sempre que necessário e deixar estes metodos genéricos de parte.

    Valeu




  1. Relacionados





Novo tópico   Responder tópico     Índice do forum -> JEE / EJB