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();
Ово ће учитати аутора и њихове књиге једним упитом.