Dica util em relacionamentos @ManyToOne

Boa tarde a todos,

Vou deixar uma dica de ouro referente aos relacionamentos @ManyToOne, @OneToMany, que é o esquema do fetchType. O fetchType é o momento do carregamento do relacionamento do objteto, ou seja, pode ser LAZY ou EAGER, pelos nomes sabemos que será tardio (LAZY) ou junto do carregamento do objeto pai (EAGER). O problema do uso do EAGER que dependendo do objeto carregado você um volume monstruoso de dados carregados, imagine isso em uma associação de produto para nota fiscal.

Muitas pessoas não usam o LAZY porque fecham a Session do Hibernate quando realizam a consulta do objeto pai. Enfim, no sistema que estou desenvolvendo eu estava ficando muito preocupado com o tamanho das queries geradas pelo Hibernate, logo olhando nos Lists dos @OneToMany, reparei que todos estavam como LAZY, mas então porque estava sendo carregado o relacionamento junto da consulta do objeto pai. A resposta era porque no objeto de associação do outro lado não estava setado o fetchType como LAZY, foi só adicionar o LAZY nas duas pontas da associação que o problema foi resolvido e as queries começaram a ser somente na tabela desejada e fazendo as consultas dos relacionamentos somente quando solicitados.

Por fim temos mais ou menos isto nas anotações das classes:

[java]

// Classe Propriedade

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(nullable=false)
private Usuario usuario;

// Classe Usuario

@OneToMany(mappedBy = “usuario”, fetch=FetchType.LAZY)
private List<Propriedade> propriedades = new ArrayList<Propriedade>();

[/java]

Fica aí a minha dica. Abraço a todos.