Sobes.tech
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.