Sobes.tech
Junior — Middle

Կարող եք տալ N+1 խնդրի առաջացման օրինակ Hibernate- ի օգտագործման ժամանակ?

sobes.tech AI

Պատասխան AI-ից

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();

Այսպիսով, հեղինակներն ու նրանց գրքերը բեռնվում են մեկ հարցմամբ։