Sobes.tech
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.