Aguem saber o que e LAZY ou EAGER

ola galera gostaria de uma ajuda suas estava lendo um arquivo sobre java com Hibernate e encontrei uma parte no qual fala que o hibernate utiliza LAZY e EAGER dai surgiu a duvida o que e isso. procurei na web mais ate agora não encotrei nada que explica-se de forma facil de enteder.aguem pode me explica o que e isso.javascript:emoticon(’:?:’);

Olá,

Lazy: Carrega sob demanda. Ex: O objeto tem um campo descrição, que você quer obter o valor. quando você utilizar o getDescricao(), ele irá obter este valor. Apenas este. Efeito colateral: requer que a conexão seja mantida aberta (isso originou o padrão “Open Session In View”.
Eager: Carrega tudo de antemão. Ex: O objeto tem um campo descrição, que você quer obter o valor, além de 20 outras coleções mapeadas, que você não precisa delas neste momento. Ele irá carregar tudo, até o que não precisa. Vantagem? Não querer “Open Session In View”.

Basicamente, é isso. Ambos possuem implicações em sua arquitetura.

Dá uma olhada em http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/ na parte 2.2.5.5. Association fetching

Bom dia.

Estou tendo problemas com o hibernate também. Parece algum tipo de LAZY nos atributos, os campos estão todos nulos, e só gera o select quando chamo um getAtributo().
Isto está ocorrendo em atributos sem relacionamentos, existe alguma configuração para que isto não aconteça, o que posso fazer?

Obrigado

Declara o FetchType para os atributos desejados como eager, o lazy dá problema quando você fecha a conexão antes de obter o atributo, mas propicia que o sistema fique mais leve (só carrega o que você precisar que carregue).

A depender da versão do hibernate, o comportamento padrão muda.

Novamente, dê uma olhada em http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/ na parte 2.2.5.5. Association fetching

Obrigado pela ajuda inacio.ferrarini.

Eu anotei uma classe: normal, já fiz casos de teste e consigo fazer load no objeto que preciso. Porém quando retorno este objeto em uma função de uma classe de um servidor REST, para conversão ocorre um erro, acho que os atributos deste objeto estão retornando como null, parace que eles são carregados sob demanda, apenas quando chamo o get, mas creio que o conversor do Jersey, não chame estes métodos get.

Fiz um teste, com uma lista, e quando retorno um objeto de uma lista gerada através do createQuery, o erro não ocorre.

porque isto ocorre? existe alguma forma de configurar o hibernate para carregar todos os atributos quando chamo um load?

Dei uma olhada neste “Open session in view”. Mas e se é uma aplicação onde trabalho somente com serviço por exemplo, é necessário fechar a sessão toda vez? Como devo trabalhar com a sessões do hibernate? Estou tendo muitos problemas com isso.

Obrigado

valeu ,muito obrigado vou da uma estudada …

O “Open Session In View” é para quando, por exemplo, você tem uma aplicação web, onde, na tela de listagem, você deve acessar campos do seu objeto, declarado como lazy.

Eu não sei se na configuração tem como você fazer override do padrão, porém, o que você pode fazer, é, para cada atributo seu, você definir o fetch type dele:

Como tem em http://docs.jboss.org/ejb3/app-server/HibernateAnnotations/reference/en/html_single/index.html, na parte 2.2.2.1. Declaring basic property mappings

Ex:
@Basic(fetch = FetchType.EAGER)
String getDetailedComment() { … } // persistent property

Faça um teste anotando suas propriedades com @Basic, como copiado acima.

Na dúvida, sempre verifique a documentação do projeto

Outro detalhe.

tentei usar o @Basic(fetchFetchType.EAGER), mas não resolveu meu problema…