Le problème de requête N 1
Le Le problème de requête N 1 survient lorsqu'une requête récupère N enregistrements et que des requêtes ultérieures sont nécessaires pour récupérer les entités associées, ce qui donne N 1 requêtes.
Comment résoudre le problème N 1 dans Hibernate
Pour résoudre ce problème, il est crucial d'activer la journalisation SQL appropriée pour détecter le problème.
Utiliser JOIN FETCH
La principale solution est d'utiliser JOIN FETCH d'Hibernate pour charger avec impatience les entités associées dans la requête initiale. Ceci peut être réalisé en modifiant la requête comme suit :
List<PostComment> comments = entityManager.createQuery( "select pc from PostComment pc join fetch pc.post p where pc.review = :review", PostComment.class) .setParameter("review", review) .getResultList();
Considérations supplémentaires
Si plusieurs associations d'enfants doivent être récupérées, envisagez de récupérer une collection dans la configuration initiale. requête et les collections supplémentaires avec des requêtes distinctes.
Détection automatique avec JUnit
Des tests d'intégration peuvent être utilisés pour détecter automatiquement le problème de requête N 1. L'utilisation d'un framework tel que db-util peut aider à valider le nombre attendu d'instructions SQL générées.
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!