Ich habe eine Java-Spring-Boot-Anwendung, die Hibernate als ORM verwenden. Die Datenbank ist ein Azure SQL Server.Spring Boot + Hibernate + SqlAzure Paginierung Ausgabe
Ich habe die SetShowSql auf Anbieter-Adapter-Konfiguration aktiviert.
Wenn ich Objekte finden möchte, habe ich die Methoden setFirstResult
und setMaxResults
von TypedQuery verwendet und dann die Methode getResultList
aufgerufen.
Die in der Konsole ausgedruckte Abfrage enthält die OFFSET- und ROW FETCH-Klauseln nicht und es scheint, dass Hibernate zuerst alle Ergebnisse abruft und dann die Seitennumerierung auf die Ergebnisliste anwendet.
Dies verursacht offensichtlich Leistungsprobleme.
Wo mache ich mich falsch?
Im Folgenden berichte ich den Beispielcode, den ich verwendet habe.
query.setFirstResult(pageable.getOffset());
query.setMaxResults(pageable.getPageSize());
...
query.getResultList()
Welchen Dialekt verwenden Sie? Enthält Ihre Abfrage auch ein 'ORDER BY'-Fragment oder sind die Ergebnisse ungeordnet? – Naros
Ich habe mit allen Dialekt versucht. Der tatsächliche Dialekt, den ich verwende, ist org.hibernate.dialect.SQLServerDialect. Bezüglich des ordeer by fragment, ja, ich habe es eingefügt und sehe es auf einer gedruckten Abfrage. Heute habe ich die neueste stabile Version von Hibernate ausprobiert, aber das Ergebnis ist das gleiche. –