Встречается на 17% собеседований по Java

Что такое проблема N+1

Проблема N+1 возникает при работе с ORM (например, Hibernate), когда для получения связанных сущностей выполняется один запрос для основной сущности и N дополнительных запросов для связанных данных. Это приводит к неэффективности и снижению производительности.

Пример:

java
@Entity
public class Author {
    @OneToMany(mappedBy = "author")
    private List<Book> books;
}

// Проблема N+1:
List<Author> authors = entityManager.createQuery("SELECT a FROM Author a", Author.class).getResultList();
for (Author a : authors) {
a.getBooks().size(); // Для каждого автора выполняется отдельный запрос для получения книг
}

text

Решение:
1. Использовать JOIN FETCH:
```java
List<Author> authors = entityManager.createQuery(
    "SELECT DISTINCT a FROM Author a LEFT JOIN FETCH a.books", Author.class).getResultList();
  1. Настроить eager loading через аннотации (не всегда оптимально)
  2. Использовать EntityGraph или Batch fetching
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы