Maison >Java >javaDidacticiel >Comment résoudre le problème N 1 dans JPA et Hibernate ?

Comment résoudre le problème N 1 dans JPA et Hibernate ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-14 18:54:02749parcourir

How to Solve the N 1 Problem in JPA and Hibernate?

Résoudre le problème N 1 dans JPA et Hibernate

Le problème N 1 survient lorsque des requêtes excessives sont exécutées pour récupérer des données relationnelles. Par exemple, dans Hibernate, une requête initiale récupère N enregistrements, et N requêtes supplémentaires sont nécessaires pour récupérer les enregistrements associés à chacun.

Pour résoudre ce problème, utilisez JOIN FETCH :

List<PostComment> comments = entityManager.createQuery(
    "select pc from PostComment pc join fetch pc.post p where pc.review = :review"
)
.setParameter("review", review)
.getResultList();

Ce JOIN FETCH récupère avec impatience l'association de publication, en éliminant les requêtes N 1.

Si plusieurs associations enfants doivent être récupérées, récupérez une collection dans la requête initiale et les autres avec les requêtes suivantes.

Détection automatique

Les tests d'intégration sont idéaux pour détecter le problème N 1. Le projet db-util fournit une assertion JUnit automatique pour valider le nombre attendu d'instructions SQL générées :

@Test
public void shouldNotHaveANPlusOneQuery() {
    // code to configure and execute db-util

    Assert.assertCountOfSqlStatementsPerformed(1);
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn