Назад к вопросам
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();
Это позволит загрузить авторов и их книги одним запросом.