Hibernate x Lazy

3 respostas
M

Pessoal, alguém poderia me esclarecer no bom e velho português… seguinte:

tenho um relacionamento @ManyToOne o que tenho q ter em mente para decidir em usar apenas @ManyToOne ou @ManyToOne(fetch=FetchType.LAZY) ??

Valew.

3 Respostas

O

marceloplis:
Pessoal, alguém poderia me esclarecer no bom e velho português… seguinte:

tenho um relacionamento @ManyToOne o que tenho q ter em mente para decidir em usar apenas @ManyToOne ou @ManyToOne(fetch=FetchType.LAZY) ??

Valew.

Eu acho que se tem que pensar em populacao na consulta. Porque quando você coloca o Many To One ele ja vem com FetchType.EAGER imbutido implicitamente. Ou seja quando você trazer um objeto Pai o atributo mapeado vai vir junto. E quando você colocar FetchType.LAZY você obtem o conteudo do mapeamento somente quando acessado pela primeira vez…

Se acaso eu estiver errado, favor me falem…

M

Quer dizer que qdo não há necessidade de trazer os objetos mapeados, é mais vantagem usar o (fetch=FetchType.LAZY) ?? ou nada haver ??

R

Isso mesmo, porem se voce usar uma arquitetura que tenha view x core, o lazy pode ser um pouco trabalhoso no desenvolvimento,

pois se solicitarmos na view, a utilizacao de um atributo que esteja dentro de um objeto @ManyToOne e esse objeto esteja LAZY

ocorrera provavelmente um erro do tipo

org.hibernate.LazyInitializationException: could not initialize proxy - no Session

tendo assim q fazer um tratamento diferente, trazendo tudo que precisa de uma vez pra camada view

Um outro problema de usar EAGER como padrao é se voce tem varios objetos ligados

Ex.:

Empresa tem Usuario que tem Grupo que tem Pais, que tem Estado, que tem Cidade

quando solicitar Empresa ele irá consultar toda essas ligacoes, sem a necessidade de usar

Não sei se há alguma forma de limitar o nivel de consulta do hibernate, desconheço, se alguem souber e puder postar, agradeço.

Criado 10 de agosto de 2007
Ultima resposta 21 de mai. de 2009
Respostas 3
Participantes 3