Sobes.tech
Назад к вопросам
Junior — Middle
72

Можешь привести пример возникновения проблемы N+1 при использовании Hibernate?

Компании, где спрашивали
Тетрасофт

Ответ от нейросети

sobes.tech AI

Проблема N+1 возникает, когда при загрузке коллекции связанных сущностей Hibernate выполняет один запрос для основной сущности (N), а затем отдельный запрос для каждой связанной сущности (+1 для каждой). Например, есть сущность Author с коллекцией books:

List<Author> authors = session.createQuery("from Author").list();
for (Author author : authors) {
    System.out.println(author.getBooks().size()); // При ленивой загрузке для каждой книги будет отдельный запрос
}

Здесь сначала выполняется один запрос для получения всех авторов, а затем для каждого автора — отдельный запрос для загрузки книг. Это приводит к множеству запросов и снижает производительность.

Чтобы избежать проблемы, можно использовать fetch join:

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

Это позволит загрузить авторов и их книги одним запросом.