nhibernate, eifriges Laden und Paging

9

Ich erstelle eine mvc-Anwendung, die nhibernate und paging verwendet. Ich habe ein Elternteil & gt; Kinderbeziehung, die ich versuche, meine Kinderaufzeichnungen eifrig zu laden. Das funktioniert alles gut.

Das Problem, das ich habe, ist mit dem Paging. Ich hätte gerne 15 Artikel pro Seite. Dies funktioniert perfekt, wenn jeder Elternteil nur ein Kind hat. Das Problem liegt vor, wenn ein Elternteil mehr als ein Kind hat. Wenn zum Beispiel der Elternteil zwei untergeordnete Datensätze hat, wählt die Datenbank tatsächlich 15 Datensätze aus, wobei zwei dasselbe Elternelement darstellen, eines für jedes der beiden untergeordneten Elemente. Daher scheint es in meiner Datenansicht auf der Seite, dass es nur 14 Datensätze gibt.

Weiß jemand, wie ich meine Seitenzahlen nur nach Elternteilen abfragen könnte, während ich noch immer meine untergeordneten Entitäten geladen habe?
Dies wird eine öffentlich zugängliche Seite sein, also denke ich nicht, dass es eine gute Idee wäre, zu faulenzen, da dies zu viele Fahrten zum Server verursachen würde.

Ist in NHibernate etwas eingebaut, das damit umgehen könnte, das ich vermisse?

Danke für irgendwelche Gedanken.

    
czuroski 10.12.2010, 14:20
quelle

3 Antworten

1

Sie könnten Ihre Verknüpfungseigenschaft mit fetch="subselect" kennzeichnen - dies stellt auch sicher, dass Sie keine Probleme mit einem riesigen kartesischen Produkt haben, und zwar auf Kosten von zwei Abfragen für jede Auswahl.

    
Goblin 10.12.2010 16:00
quelle
0

Sie müssen für Ihre Abfrage einen eindeutigen Stammelement-Ergebnistransformer verwenden. Sie haben nicht gesagt, ob Sie HQL oder Criteria verwenden, aber die API ist für beide ähnlich.

%Vor%

Dies erzwingt, dass die Ergebnismenge nur bestimmte übergeordnete Entitäten enthält.

    
James Gregory 10.12.2010 15:55
quelle
0

Die Verwendung des batch-size -Hinweises in Ihrem Mapping für die untergeordnete Sammlung ist wahrscheinlich der beste / einfachste Weg, um damit umzugehen. Weitere Informationen finden Sie in meiner Antwort auf diese ähnliche Frage .

    
DanP 10.12.2010 18:39
quelle