Quando e como usar FetchType.LAZY e FetchType.EAGER?

4 respostas
_
Considere o seguinte modelo simplificado:
class Pessoa {
    public List< Telefone > telefones;
}

class Telefone {
    public String numero;
}
Ao fazer isso;
Pessoa p = ( Pessoa ) session.get( Pessoa.class, 1 );

Se "telefones" for declarado EAGER a lista de telefones é carregada automaticamente ao fazer o "get" de Pessoa.

Se "telefones" for declarado LAZY, a lista de telefones só será carregada (implicando mais um select no banco) se ela for acessada.

Contanto que a session ainda esteja aberta, o uso fica transparente:
p.getTelefones().size();
É executado normalmente em ambos os casos. Mas com o LAZY o select no banco ocorre no momento em que acessar a coleção.

4 Respostas

J
Filipe Sabella:
Considere o seguinte modelo simplificado:
class Pessoa {
    public List< Telefone > telefones;
}

class Telefone {
    public String numero;
}
Ao fazer isso;
Pessoa p = ( Pessoa ) session.get( Pessoa.class, 1 );

Se "telefones" for declarado EAGER a lista de telefones é carregada automaticamente ao fazer o "get" de Pessoa.

Se "telefones" for declarado LAZY, a lista de telefones só será carregada (implicando mais um select no banco) se ela for acessada.

Contanto que a session ainda esteja aberta, o uso fica transparente:
p.getTelefones().size();
É executado normalmente em ambos os casos. Mas com o LAZY o select no banco ocorre no momento em que acessar a coleção.

Show de bola !
:)

D

obrigado pelas explicações

D

estou mapeando minhas classes no Hibernate e gostaria de saber quais as diferenças entre LAZY e EAGER. to conseguindo resultado com as duas opcoes, mas não sei o que isso implica. Se alguem puder me esclarecer isso desde de ja agradeço.

D

valeu pela resposta Filipe, realmente esclarecedor :).

Criado 7 de abril de 2008
Ultima resposta 7 de abr. de 2008
Respostas 4
Participantes 4