Sobes.tech
Junior — Middle

Hibernate қолданғанда N+1 мәселесінің пайда болу мысалын келтіре аласыз ба?

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

Бұл авторлар мен олардың кітаптарын бір сұрау арқылы жүктеуге мүмкіндік береді.