Maison  >  Article  >  Java  >  Comment résoudre le problème de requête N 1 dans JPA et Hibernate ?

Comment résoudre le problème de requête N 1 dans JPA et Hibernate ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-11 12:23:03953parcourir

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

Quelle est la solution au problème N 1 dans JPA et Hibernate ?

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!

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