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();
Այսպիսով, հեղինակներն ու նրանց գրքերը բեռնվում են մեկ հարցմամբ։