Hibernate.initialize não inicializaria todo o objeto?

7 respostas
A

Galera to com um problema que quando eu faço o Hibernate.iniitialize(obj) ele não deveria startar todas as coleções do objeto, mais eu tive que fazer Hibernate.iniitialize(obj.colecao) alguem tem como me explicar para que serve realmente o Hibernate.iniitialize

7 Respostas

G

O Hibernate.initialize realmente inicializa só os atributos simples do teu objeto. O que dá problema mesmo de verdade, no caso as listas, vc tem que inicializar explicitamente. Tanto que no javadoc está escrito que serve para inicializar um objeto ou coleção.
Falando francamente, esse initialize na coleção é só pra nao ficar tão feio quanto voce fazer objeto.getColecao() sem precisar usar ela naquele momento.
Tanto que no sistema que trabalho eu fiz um método que inicializa tudo de uma vez usando reflection pra iniciar todas as listas, mas só uso nos casos onde eu preciso disso.

P

E sempre tem gente que consegue estragar todo o trabalho que os desenvolvedores tiveram pra criar a macumba de Lazy initialization do hibernate…

A

Po Plentz então de sua visão cosmica sobre o assunto e nos ilumine, pois esta dando exception no lazy initialization, neste momento não tem problema que carregue tudo mesmo, mais queria entender na real o problema para numa hora em que eu precise fazer da maneira correta eu tenha conhecimento para tanto.
:smiley:

P

Primeiro dê uma lida no wiki do hibernate e tente entender o funcionamento/idéia da Session. Depois, procure por OpenSessionInView

Isso já vai te ajudar bastante :wink:

A

Agora sim meu brother.
valeu pelo material vou dar uma lida esse final de semana, e espero que não se incomede se eu vinher de novo, pois cai de paraquedas para usar hibernate e não quero apenas usar quero entender o que eu estou fazendo.
te mais.

G

bom, acho que faltou ler esse pedacinho aqui. Lazy é legal, mas nao quer dizer que voce é obrigado ou precisa usar em todo lugar, tem horas que mais atrapalha do que ajuda. A gente sabe que tem lugares onde precisamos sim acabar com a inicialização lazy, como telas complexas de mestre-detalhe onde vc mostra praticamente tudo de todos os objetos. E nesse caso, nao tem OpenSessionInView que de jeito na situação. Entao ou voce faz uma busca passando um FetchMode diferente, ou entao simplesmente dá um initialize onde voce precisa mesmo.

P

Não, eu li tudo mesmo.

Concordo 100% que você não é obrigado à usar em todo lugar. E nem deve, cada caso deve ser avaliado antes de decidir qual Fetch Strategy deve ser usado.

Você poderia explicar melhor esse seu exemplo? Porque usar OpenSessionInView “não daria jeito na situação”?

Pelo que sei de Hibernate, o método initialize faz exatamente a mesma coisa que uma inicialização lazy faria, com a vantagem que a inicialização lazy seria disparada somente se fosse realmente necessário a inicialização daquele objeto/coleção (ao contrário do método mágico inicializador que você usa ai). Qual seria a vantagem de “dar um initialize”?

Criado 22 de março de 2007
Ultima resposta 24 de mar. de 2007
Respostas 7
Participantes 3