


Pourquoi NHibernate QueryOver avec Eager Fetching génère-t-il plusieurs requêtes SQL ?
Jan 05, 2025 pm 04:13 PMNHibernate QueryOver avec Fetch entraînant plusieurs requêtes SQL
Problème de requête :
Lors de l'utilisation QueryOver pour récupérer une liste associée à l'aide d'un chargement rapide, plusieurs accès à la base de données se produisent, ce qui entraîne de nombreux SQL distincts requêtes.
Exemple :
Session.QueryOver<UserRole>() .Fetch(x => x.UsersInRole).Eager .List();
Explication :
Ce comportement est dû à la nature de plusieurs-à -de nombreuses relations. Dans l'exemple de mappage, une entité UserRole a une relation plusieurs-à-plusieurs avec les entités UsersInRole. Lorsque le chargement rapide est utilisé, NHibernate tente de charger toutes les entités UsersInRole associées pour chaque entité UserRole récupérée.
Cependant, étant donné que la session ne contient peut-être pas encore toutes les entités associées, plusieurs requêtes SQL sont émises pour récupérer ces relations. La requête initiale récupère les entités UserRole et des requêtes ultérieures sont émises pour chaque UserRole afin de récupérer ses entités UsersInRole associées.
Solution :
Une solution efficace pour minimiser les requêtes SQL consiste à utiliser la récupération par lots. En définissant la propriété BatchSize sur le mappage HasManyToMany, NHibernate peut récupérer plusieurs entités associées dans une seule requête SQL.
HasManyToMany(x => x.UsersInRole) ... .BatchSize(25)
En définissant la taille du lot sur une valeur appropriée (par exemple, 25), NHibernate émettra un nombre limité de requêtes SQL, réduisant ainsi le nombre total d'accès à la base de données et améliorant les performances.
De plus, la définition de la taille du lot sur la carte de classe peut aider également à optimiser la stratégie globale de récupération.
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Comment sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?
