Pessoal,
Não se é possivel, mas estou tentando fazer um fetch join entre 3 tabelas. No entanto, esta ocorrendo erros durante a execução do código.
Segue 2 exemplos abaixo:
Nenhuma desta querys executam. As tabelas citadas possuem um relacionamento 1-N.
Realmente não sei se isso é possivel. Sei q o fetch join funciona perfeitamente com 2 tablemas.
Será que alguém poderia me ajudar com essa questão ?
Abs
Kra, tive problemas com isso a pouco tempo e resolvi de outra forma, não coloquei o fetch na query e após resgatar os objetos, dei um Hibernate.initialize(meuobjeto.propriedadeParaSerInicializada());, daí resolveu.
[]'s
F
fabiofalci
Se não me engano isso não funciona
fetcht1.tabela2.tabela3
Tem que ir fazendo uma por uma até chegar na 3.
Algo assim (tem q acertar os alias acho):
t1.tabela2
tabela2.tabela3
P
paradiso
Não conhecia o Hibernate.initialize, mas pelo que entendi, ele é executado com o objeto recuperado. Não cheguei a usa-lo para afirmar qualquer coisa, mas me parece que não muda muito pois haverá uma nova execução de query.
Pra falar a verdade, nem tenho como utilizar ele pois estou utilizando o EclipseLink. Não sei ao certo se ele possui algo similar ao initialize Hibernate.
A questão é que eu queria reduzir o número de query executadas. Tenho como alterativa alterar para FetchType.EAGER através de reflection em tempo de execução. Mesmo assim terei várias execuções de querys.
P
paradiso
Será que ninguém teria uma idéia de como resolver isso ?
R
rogelgarcia
Se eu entendi bem…
No seu relacionamento…
Tem a Tabela 1
A tabela 1 tem vários… tabela 2
E a tabela 2 tem várias tabela 3?
Isso?
Se for, o hibernate não vai retornar um resultado legal… pois vai criar um tabela 1… para cada tabela 3 encontrado… ou seja… vai duplicar os tabela 1
Se for… tabela 1… tem um tabela 2… e tabela 2 tem um tabela 3… aí o resultado sai lega…
Essa query deve funcionar (idependente do mapeamento se é many to one ou one to many):
from Tabela1 t1
inner join fetch t1.tabela2 t2
inner join fetch t2.tabela3 t3
fabiofalci: Você havia perguntado no outro post sobre coisas paupáveis… Uma das vantagens do Next, é resolver o problema dos registros duplicados do hibernate… que citei acima
R
rogelgarcia
Se os mapeamentos forem… One to many…
É recomendável fazer 3 queries separadas…
Faz uma query para a t1… depois uma para a t2… e seta os t1 com os t2 encontrados…
Depois uma para a t3… e seta os t2 com os t3 encontrados…