9 Stimmen

Das setFirstResult()-Problem von Hibernate mit dem Oracle Jdbc-Treiber

Ich versuche, mit Hibernate eine Paginierung durchzuführen, indem ich setFirstResult() y setMaxResults() aber ich erhalte nicht die erwarteten Ergebnisse, wenn ich das erste Ergebnis auf 0 setze.

Wenn Sie Folgendes tun:

Query query = session.createQuery(queryString);  
query.setFirstResult(0);  
query.setMaxResults(30);  
List list = query.list();  //list.size() returns 10  

aber wenn ich das erste Ergebnis auf 1 setze (oder irgendetwas anderes als 0, was das betrifft):

query.setFirstResult(1);  
query.setMaxResults(30);  
List list = query.list();  //list.size() returns 30  

Ich habe gelesen, dass dies ein bekannter Fehler im Jdbc-Treiber ist, aber ich habe nach einer Lösung gesucht und kann sie nicht finden. Hat jemand über etwas ähnliches laufen und fand eine Lösung für sie?

14voto

Bernardo Punkte 1053

Offensichtlich werden setFetchSize() erfüllt den Zweck. So etwas funktioniert jetzt perfekt:

query.setFirstResult(0);  
query.setMaxResults(30);  
query.setFetchSize(30);  
List list = query.list(); //list.size() now returns... wait for it... 30

1voto

Harald Brabenetz Punkte 375

Eine andere Lösung besteht darin, einen eigenen Oracle-Dialekt zu implementieren:

public class Oracle10gDialectLimitBugfix extends Oracle10gDialect {
    @Override
    public boolean forceLimitUsage() {
        return true;
    }
}

Voir https://forum.hibernate.org/viewtopic.php?p=2379096

UPDATE: Das Problem scheint in Oracle 11.2.0.1.0 behoben zu sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X