Sobes.tech
Junior — Middle

Можеш ли дати пример појаве проблема N+1 при коришћењу Hibernate?

sobes.tech АИ

Одговор од АИ

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

Ово ће учитати аутора и њихове књиге једним упитом.