Hibernate x Lazy

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.

[quote=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.[/quote]

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…

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

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.