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

ეს საშუალებას მოგცემთ, ავტორები და მათი წიგნები ერთ შეკითხვაში ჩაიტვირთოს.