Sobes.tech
Junior — Middle
95

Tudsz példát mondani az N+1 problémára Hibernate használata közben?

Cégeket kérdeztek
Тетрасофт

Válasz az MI-től

sobes.tech MI

Проблема 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();

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