HQL - Zeilenbezeichner für die Seitennummerierung

8

Weiß jemand, ob HQL ein Schlüsselwort hat, um Zeilen wie ROWID oder ROWNUM zu identifizieren?

Ich möchte die Seitennummerierung mit HQL implementieren, aber ich kann .setMaxResult () oder .setFirstResult () nicht verwenden, da ich nicht direkt mit dem Sitzungsobjekt arbeite und daher das Query-Objekt nicht verwende, sondern einfach create meine Abfrage als Zeichenfolge und verwenden Sie die .find () -Methode.

Ich habe versucht, LIMIT und OFFSET in meiner Abfrage zu verwenden, aber HQL scheint diese Schlüsselwörter zu ignorieren und gibt das ganze Ergebnis an mich zurück, egal was passiert.

Ich bin auch nicht in der Lage, Hibernate-Kriterien zu verwenden, da es die "HAVING" -Klausel, die in meiner Abfrage erscheint, nicht unterstützt.

Meine letzte Möglichkeit besteht darin, die Ergebnismenge mit dem Schlüsselwort ROWNUM / ROWID einzuschränken. Hat noch jemand andere Vorschläge?

    
user57701 28.01.2009, 21:04
quelle

3 Antworten

18

Dies ist eine Situation, in der der Winterschlaf glänzt:

typische Lösung mit hql-Abfrage.

%Vor%

Hibernate übersetzt dies in ein Muster, das von der Datenbank nach ihrem SQL-Dialekt verstanden wird. Auf Orakel wird ein Subselect mit ROWNUM & lt; X. Auf postgresql wird ein LIMIT / OFFSET ausgegeben Auf dem MsSQL-Server wird ein TOP ausgegeben.

meines Wissens ist es nicht möglich, dies mit "reinem" hql zu erreichen.

    
Andreas Petersson 08.05.2009 14:38
quelle
2

Nun, Sie können ROWNUM / ROWID grundsätzlich von HSQL aus aufrufen (obwohl ich es nie benutzt habe). Siehe z.B. Ron's Weblog . Das sollte funktionieren.

Aber ich möchte darauf hinweisen, dass Sie wirklich gegen Hibernate und HSQL arbeiten, wenn Sie es so machen. Der richtige Weg ist, setMaxResult () & amp; Freunde. Wenn Sie das b / c Ihrer Architektur nicht tun können, würde ich meine architektonischen Entscheidungen zumindest überdenken. Ich weiß, das sind immer harte Veränderungen, aber es könnte sich lohnen.

    
sleske 29.01.2009 11:42
quelle
2

Seitenumbruch mit Query-Schnittstelle:

Es gibt zwei Methoden der Query-Schnittstelle für die Paginierung.

1. Abfrage setFirstResult (int startPosition): Diese Methode verwendet eine Ganzzahl, die die erste Zeile in der Ergebnismenge darstellt, beginnend mit Zeile 0.

2. Abfrage setMaxResults (int maxResult): Diese Methode weist Hibernate an, eine feste Zahl maxResults von Objekten abzurufen. Mit den beiden oben genannten Methoden können wir eine Paging-Komponente in unserer Web- oder Swing-Anwendung erstellen.

Beispiel:

%Vor%

Paginierung mithilfe der Kriterienschnittstelle: Es gibt zwei Methoden der Criteria-Schnittstelle für die Paginierung.

1. Kriterien setFirstResult (int firstResult):

Legen Sie das erste Ergebnis fest, das abgerufen werden soll.

2. Listenelement Kriterien setMaxResults (int maxResults):

Legen Sie eine Begrenzung für die Anzahl der Objekte fest, die abgerufen werden sollen.

Beispiel:

%Vor%     
Ranga Reddy 16.05.2014 14:40
quelle

Tags und Links