Sobes.tech
Junior — Middle

Podes dar um exemplo de ocorrência do problema N+1 ao usar Hibernate?

sobes.tech IA

Resposta da IA

O problema N+1 ocorre quando, ao carregar uma coleção de entidades relacionadas, o Hibernate executa uma consulta para a entidade principal (N) e depois uma consulta separada para cada entidade relacionada (+1 para cada uma). Por exemplo, há uma entidade Author com uma coleção de books:

List<Author> authors = session.createQuery("from Author").list();
for (Author author : authors) {
    System.out.println(author.getBooks().size()); // Com carregamento preguiçoso, uma consulta separada para cada livro
}

Aqui, primeiro é executada uma consulta para obter todos os autores, e depois, para cada autor, uma consulta separada para carregar os livros. Isso leva a muitas consultas e reduz o desempenho.

Para evitar esse problema, pode-se usar fetch join:

List<Author> authors = session.createQuery("select a from Author a join fetch a.books").list();

Isso permitirá carregar autores e seus livros com uma única consulta.