Junior — Middle
Pouvez-vous donner un exemple de problème N+1 lors de l'utilisation de Hibernate?
sobes.tech IA
Réponse de l'IA
Le problème N+1 survient lorsque, lors du chargement d'une collection d'entités liées, Hibernate exécute une requête pour l'entité principale (N) puis une requête séparée pour chaque entité liée (+1 pour chacune). Par exemple, il y a une entité Author avec une collection de books :
List<Author> authors = session.createQuery("from Author").list();
for (Author author : authors) {
System.out.println(author.getBooks().size()); // En chargement paresseux, une requête séparée pour chaque livre
}
Ici, une requête est d'abord exécutée pour obtenir tous les auteurs, puis, pour chaque auteur, une requête séparée pour charger les livres. Cela conduit à de nombreuses requêtes et réduit la performance.
Pour éviter ce problème, on peut utiliser fetch join :
List<Author> authors = session.createQuery("select a from Author a join fetch a.books").list();
Cela permettra de charger les auteurs et leurs livres en une seule requête.