Implementieren des Ergebnis-Paging im Ruhezustand (Ermitteln der Gesamtanzahl der Zeilen)

8

Wie implementiere ich Paging in Hibernate? Die Query Objekte haben Methoden namens setMaxResults und setFirstResult die sicherlich hilfreich sind. Aber wo bekomme ich die Gesamtzahl der Ergebnisse, so dass ich den Link zur letzten Seite der Ergebnisse anzeigen kann und Dinge wie die Ergebnisse 200 bis 250 von xxx ausdrucken kann?

    
flybywire 21.10.2009, 11:22
quelle

5 Antworten

12

Sie können Query.setMaxResults (int results) und Query.setFirstResult (int offset) verwenden.

Bearbeiten auch: Es gibt keine Möglichkeit zu wissen, wie viele Ergebnisse Sie erhalten werden. Also, zuerst müssen Sie mit "Select count (*) ..." abfragen. Ein bisschen hässlich, IMHO.

    
sinuhepop 21.10.2009, 11:32
quelle
7

Sie müssen eine separate Abfrage durchführen, um die maximalen Ergebnisse zu erhalten ... und in dem Fall zwischen dem Zeitpunkt A und dem Zeitpunkt, zu dem neue Datensätze hinzugefügt werden Einige Datensätze passen jetzt zu den Kriterien, dann müssen Sie die max erneut abfragen, um diese zu berücksichtigen. Normalerweise mache ich das in HQL so

%Vor%

für Criteria Abfragen Ich schiebe meine Daten normalerweise in ein DTO wie dieses

%Vor%     
non sequitor 21.10.2009 16:30
quelle
1

Sie können zwei Abfragen ausführen - eine Abfrage vom Typ count (*), die billig sein soll, wenn Sie nicht zu viele Tabellen zusammenfügen, und eine zweite Abfrage, für die Grenzwerte festgelegt sind. Dann wissen Sie, wie viele Elemente vorhanden sind, aber greifen Sie nur nach denen, die gerade angezeigt werden.

    
Chii 21.10.2009 11:25
quelle
0

Sie können MaxResults auf die maximale Anzahl von Zeilen festlegen, die zurückgegeben werden sollen. Es kann nicht schaden, diesen Wert größer als die Anzahl der tatsächlich verfügbaren Zeilen zu setzen. Das Problem der anderen Lösungen ist, dass sie annehmen, dass die Reihenfolge der Datensätze bei jeder Wiederholung der Abfrage gleich bleibt und dass keine Änderungen zwischen den Befehlen stattfinden.

Um zu vermeiden, dass Sie wirklich durch die Ergebnisse blättern möchten, verwenden Sie am besten die ScrollableResults. Werfen Sie dieses Objekt nicht zwischen den Seitenwechsel, sondern verwenden Sie es, um die Datensätze in der gleichen Reihenfolge zu halten. Um die Anzahl der Datensätze aus den ScrollableResults herauszufinden, können Sie einfach zur letzten () Position gehen und dann die Zeilennummer abrufen. Denken Sie daran, diesem Wert 1 hinzuzufügen, da die Zeilennummern bei 0 beginnen.

    
Bill 12.03.2013 13:15
quelle
-2

Ich persönlich denke, Sie sollten mit dem Paging im Frontend umgehen. Ich weiß, das ist nicht so effizient, aber es wäre weniger fehleranfällig.

Wenn Sie die Sache count (*) verwenden würden, was passieren würde, wenn Datensätze zwischen den Anforderungen für eine bestimmte Seite aus der Tabelle gelöscht werden? Viele Dinge könnten so schief gehen.

    
NickDK 21.10.2009 12:24
quelle

Tags und Links