Vc esta rodando em standalone? Digo fora de um server EE (tipo glassfish)? Se for o caso procure a respeito de weaving, ele fará que o lazy funcione corretamente
fausto,
Na real, estou testando da forma mais simples, ou seja, em um método estático em uma classe comum só para fins didáticos.
Lí em todos os tutoriais até o momento que o Lazy não traz os filhos, mas ao buscar a pessoa com seu endereço todos vêm juntos.
O que me deixou perplexo, essa lógica é aplicada somente quando se trata de um cliente fazendo uma solicitação para um servidor?
[quote=fabioEM]
List<Pessoa>lista = HibernateUtil.getlist("Pessoa");
for(Pessoa pe:lista){
System.out.println(pe.getNome());
for(Endereco e:pe.getEnderecos()){
System.out.println(e.getPais());
}
}
Esta me retornando todas as pessoas com todos os seus endereços. O que esta de errado na anotação[/quote]
Opa FabioEM, existem dois pontos:
Primeiro, Se vc estiver ainda com a sessão ativa ele irá carregar as entidades associadas se vc chamar, isso ocorre até mesmo qdo se usa o debug e tenta ver o que contem dentro da lista, ou seja cuidado pois ao testar a funcionalidade sem querer vc acaba carregando as entidades.
No caso do eclipselink que é outra implementação do jpa, e que eu uso, mesmo que vc de um close no entitymanager e no factory, se vc tentar iterar pelas associações ele volta a se conectar ao banco e as carrega. Uma forma mais garantida de testar essa questão é habilitando o log do hibernate, veja na documentação, assim vc saberá exatamente o que foi carregado e qual query foi criada para tal, é assim que eu faço para o eclipselink.
Segundo, a documentação diz que o lazy é uma “dica” a engine da persistencia, ou seja não precisa ser respeitada e cabe à implementação decidir sobre isso. No caso do eclipselink, se vc usar em standalone - o mesmo que vc está fazendo mas com o hibernate - o lazy NUNCA funciona, a menos que vc utilize o static weaving que altera as suas classes. Creio que o hibernate funcione assim tb, ou seja procure por weaving (dinamic ou static) e veja como deve ser configurado. No eclipselink eu uso um script do ant para compilar e executar o static weaving.