Junior — Middle
Vai vari sniegt piemēru par N+1 problēmas rašanos, izmantojot Hibernate?
sobes.tech AI
Atbilde no AI
N+1 problēma rodas, ielādējot saistīto entītu kolekciju, kad Hibernate veic vienu pieprasījumu galvenajai entītijai (N), un pēc tam atsevišķu pieprasījumu katrai saistītajai entītijai (+1 katrai). Piemēram, ir entītija Author ar kolekciju books:
List<Author> authors = session.createQuery("from Author").list();
for (Author author : authors) {
System.out.println(author.getBooks().size()); // Ar lazy ielādi, katram grāmatai būs atsevišķs pieprasījums
}
Šeit vispirms tiek veikts viens pieprasījums, lai iegūtu visus autorus, un pēc tam katram autoram — atsevišķs pieprasījums grāmatu ielādei. Tas noved pie daudzām pieprasījumiem un samazina veiktspēju.
Lai izvairītos no šīs problēmas, var izmantot fetch join:
List<Author> authors = session.createQuery("select a from Author a join fetch a.books").list();
Tas ļaus ielādēt autorus un viņu grāmatas ar vienu pieprasījumu.