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.
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.