Bem-vindo ao meu blog

Compartilhando conhecimento sobre tecnologia, programação e mais!

JPA: Lazy ou Eager? A Escolha que Impacta sua Performance

Publicado em: 15 de August de 2025 | Categorias: Java
JPA: Lazy ou Eager? A Escolha que Impacta sua Performance

Ao criar relacionamentos entre entidades com JPA, como um Pedido com seus Itens, precisamos decidir quando carregar esses dados relacionados. A escolha entre as estratégias Lazy (preguiçosa) e Eager (apressada) afeta diretamente a performance da sua aplicação. Vamos entender isso de forma rápida.

Explicação

Pense em uma série de um serviço de streaming:

No JPA:

Por padrão, relacionamentos como @OneToMany (um-para-muitos) são Lazy, enquanto @ManyToOne (muitos-para-um) é Eager.

Exemplo Prático

Vamos imaginar uma Categoria com vários Produtos.

    
    @Entity
    public class Categoria {
        @Id
        private Long id;
        private String nome;

        // A estratégia de busca é definida aqui
        @OneToMany(mappedBy = "categoria", fetch = FetchType.LAZY)
        private List<Produto> produtos;

        // ...
    }
    

Como o JPA reage:

  1. Com FetchType.LAZY:
    • Código: repository.findById(1L);
    • SQL: SELECT * FROM Categoria WHERE id = 1;
    • Resultado: Apenas a categoria é carregada. A lista de produtos só será buscada do banco se você chamar o método getProdutos().
  2. Com FetchType.EAGER:
    • Código: repository.findById(1L);
    • SQL: SELECT * FROM Categoria c LEFT JOIN Produto p ON c.id = p.categoria_id WHERE c.id = 1;
    • Resultado: A categoria e todos os seus produtos são carregados do banco de uma só vez.

Conclusão

A regra geral é simples: prefira Lazy. Ele evita carregar dados desnecessários e previne problemas de performance, principalmente em listas longas. Use EAGER apenas quando tiver certeza absoluta de que sempre precisará dos dados relacionados junto com a entidade principal.

Essa pequena escolha tem um grande impacto. Dominá-la é um passo importante para criar aplicações Java eficientes e escaláveis.