Junior — Middle
99
Hibernate kullanırken N+1 sorununun oluşumuna bir örnek verebilir misin?
Sorulan şirketler
Тетрасофт
AI'dan gelen yanıt
sobes.tech yapay zeka
Проблема 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();
Это позволит загрузить авторов и их книги одним запросом.