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.