Hibernate Kriterien n + 1 Problem mit maxresults

8

Unter Verwendung des Ruhezustands möchte ich ein Objekt auswählen, das einer ganzen Liste von Objekten zugeordnet ist. Ich möchte durch diese Liste paginieren, um das gefürchtete Hibernate n + 1 Problem zu vermeiden

Hier ist eine funktionierende Lösung, die 11 Fahrten zu der Datenbank für 10 Elternobjekte benötigt.

%Vor%

Und hier ist eine Lösung, die nur eine sql-Anweisung (hurray) ausführt, aber die Paginierung nicht verarbeiten kann, dh setMaxResults und setFirstResult sind beim übergeordneten Objekt Mother (boo)

falsch %Vor%

Dies scheint so eine allgemeine Anforderung zu sein, aber ich habe nach einer Lösung gesucht, die kein Glück bringt.

Irgendwelche Abnehmer?

    
jaseFace 06.04.2011, 14:11
quelle

2 Antworten

15

Es ist schwierig, es auf eine Abfrage zu bringen (d. h. ich kenne keine portable Lösung), aber es ist ziemlich einfach, es auf zwei Abfragen (unabhängig von n) zu reduzieren:

%Vor%

Bei einigen Datenbanken funktioniert möglicherweise auch das Subselect-Holen von children .

    
meriton 06.04.2011, 17:53
quelle
2

Soweit ich weiß, gibt es keine guten Möglichkeiten, dieses Problem zu lösen, mit Ausnahme des folgenden Tricks mit nativer SQL-Abfrage (genaue SQL-Syntax hängt von Ihrem DBMS ab):

%Vor%     
axtavt 06.04.2011 15:10
quelle

Tags und Links