Heim > Datenbank > MySQL-Tutorial > Warum generiert NHibernate QueryOver mit Eager Fetching mehrere SQL-Abfragen?

Warum generiert NHibernate QueryOver mit Eager Fetching mehrere SQL-Abfragen?

Susan Sarandon
Freigeben: 2025-01-05 16:13:45
Original
502 Leute haben es durchsucht

Why Does NHibernate QueryOver with Eager Fetching Generate Multiple SQL Queries?

NHibernate QueryOver mit Abruf führt zu mehreren SQL-Abfragen

Abfrageproblem:

Bei der Verwendung Wenn QueryOver eine Themenliste mithilfe von Eager Loading abruft, treten mehrere Datenbanktreffer auf, was zu zahlreichen separaten SQL-Anweisungen führt Abfragen.

Beispiel:

Session.QueryOver<UserRole>()
       .Fetch(x => x.UsersInRole).Eager
       .List();
Nach dem Login kopieren

Erklärung:

Dieses Verhalten ist auf die Natur von Many-to zurückzuführen -viele Beziehungen. In der Beispielzuordnung hat eine UserRole-Entität eine Viele-zu-Viele-Beziehung mit UsersInRole-Entitäten. Wenn Eager Loading verwendet wird, versucht NHibernate, alle zugehörigen UsersInRole-Entitäten für jede abgerufene UserRole-Entität zu laden.

Da die Sitzung jedoch möglicherweise noch nicht alle zugehörigen Entitäten enthält, werden mehrere SQL-Abfragen ausgegeben, um diese Beziehungen abzurufen. Die erste Abfrage ruft die UserRole-Entitäten ab, und nachfolgende Abfragen werden für jede UserRole ausgegeben, um die zugehörigen UsersInRole-Entitäten abzurufen.

Lösung:

Eine effektive Lösung zur Minimierung von SQL-Abfragen besteht darin, Batch-Abruf zu verwenden. Durch Festlegen der BatchSize-Eigenschaft für die HasManyToMany-Zuordnung kann NHibernate mehrere verwandte Entitäten in einer einzigen SQL-Abfrage abrufen.

HasManyToMany(x => x.UsersInRole)
...
.BatchSize(25)  
Nach dem Login kopieren

Durch Festlegen der Batch-Größe auf einen geeigneten Wert (z. B. 25) gibt NHibernate eine aus Begrenzte Anzahl von SQL-Abfragen, wodurch die Gesamtzahl der Datenbanktreffer reduziert und die Leistung verbessert wird.

Darüber hinaus kann auch das Festlegen der Stapelgröße in der Klassenzuordnung hilfreich sein Optimieren Sie die allgemeine Abrufstrategie.

Das obige ist der detaillierte Inhalt vonWarum generiert NHibernate QueryOver mit Eager Fetching mehrere SQL-Abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage