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

Considere o seguinte modelo simplificado:

[code]
class Pessoa {
public List< Telefone > telefones;
}

class Telefone {
public String numero;
}[/code]

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:

É executado normalmente em ambos os casos. Mas com o LAZY o select no banco ocorre no momento em que acessar a coleção.

[quote=Filipe Sabella]Considere o seguinte modelo simplificado:

[code]
class Pessoa {
public List< Telefone > telefones;
}

class Telefone {
public String numero;
}[/code]

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:

É executado normalmente em ambos os casos. Mas com o LAZY o select no banco ocorre no momento em que acessar a coleção.[/quote]

Show de bola !
:slight_smile:

obrigado pelas explicações

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.

valeu pela resposta Filipe, realmente esclarecedor :).