sexta-feira, 20 de maio de 2016

JPA HIBERNATE e CARREGAMENTO FetchType.LAZY

Este post tem por objetivo demonstrar como é feito o carregamento de um objeto(Endereco) mapeado com o LAZY para um objeto (Usuario). 

Abaixo trecho do fonte em Java (Usuario.java) de um mapeamento LAZY, digamos que o mapeamento da sua "Entity" por questões de performance ou até mesmo por padrão do projeto foi mapeado com o carregamento do tipo LAZY (fetch = FetchType.LAZY)

Usuario.java
@Entity
@Table(name = "usuario")
public class Usuario {
   
  @Column
  private String nome;

 @ManyToOne(fetch = FetchType.LAZY)
 @JoinColumn(name = "id_endereco")
 private Endereco endereco;
 
 public String getNome() {
     return nome;
 }
   
 public void setNome(String nome) {
       this.nome = nome;
 } 
 public Endereco getEndereco() {
      return endereco;
 }
   
 public void setEndereco(Endereco endereco) {
       this.endereco = endereco;
 }
} 

Este trecho demonstra o carregamento da entidade "Endereco" sendo executado via código Java, anteriormente conforme mapeado na classe "Usuario.java", podemos observar o mapeamento LAZY para o atributo "endereco", que ao capturar os usuários por sua vez não é carregado a não ser que seja feito o fonte conforme trecho abaixo (Hibernate.initialize(usuario.getEndereco());) :
private List<Usuario> obterUsuarios(Query query) {
List<Usuario> usuarios = (List<Usuario>) query.getResultList();
for (Usuario usuario : usuarios){
Hibernate.initialize(usuario.getEndereco());
}
return usuarios;
}

Após utilizar Hibernate.initialize sua lista terá seus objetos carregados, com seus respectivos endereço.

Nenhum comentário:

Postar um comentário