Junior — Middle
Kun je een voorbeeld geven van het ontstaan van het N+1 probleem bij het gebruik van Hibernate?
sobes.tech AI
Antwoord van AI
Het N+1-probleem ontstaat wanneer Hibernate bij het laden van een collectie gerelateerde entiteiten één query uitvoert voor de hoofdentiteit (N) en vervolgens een aparte query voor elke gerelateerde entiteit (+1 per stuk). Bijvoorbeeld, er is een entiteit Author met een collectie books:
List<Author> authors = session.createQuery("from Author").list();
for (Author author : authors) {
System.out.println(author.getBooks().size()); // Bij lazy loading wordt voor elk boek een aparte query uitgevoerd
}
Hier wordt eerst één query uitgevoerd om alle auteurs op te halen, en vervolgens voor elke auteur een aparte query om de boeken te laden. Dit leidt tot veel queries en vermindert de prestaties.
Om dit probleem te voorkomen, kan je gebruik maken van fetch join:
List<Author> authors = session.createQuery("select a from Author a join fetch a.books").list();
Dit stelt je in staat om auteurs en hun boeken in één query te laden.