Hi Leute!
Weiß jemand von euch, wie JPA mit Hibernate als Implementierung intern mit Query.setFirstResult() und Query.setMaxResults() umgeht? Es ist so, ich hab eine Query, die ungefähr 20.000 Datensätze liefert. Die Abfrage dauert ca. 30 Sekunden. Begrenze ich die Abfrage auf ca. 1.000 Datensätze mit Query.setFirstResult(0) und Query.setMaxResults(1000) dauert die Abfrage ebenfalls 30 Sekunden. Das ist ja noch nicht das Problem, das liegt denke ich mal auch an der Datenbank und nicht an JPA/Hibernate.
Was mich nur wundert ist, dass selbst die Abfrage auf nur 1.000 Datensätze genausoviel Speicher braucht? Nur dann frage ich mich, wieso es wieder 30 Sekunden dauert, wenn ich setFirstResult(1000) ausführe und mir nochmals das Ergebnis geben lasse.
Kann mir jemand erklären wie JPA/Hibernate das intern übersetzt und damit umgeht? Holt sich der immer die komplette Liste und teilt es dann auf? Das würde erklären, warum immer der gleiche Speicher verwendet wird. Erklärt aber nicht, warum die nächste Result-List wieder 30 Sekunden auf sich warten lässt (intern wäre ja die ganze Liste vorhanden).
Oder wird jedesmal die Query erneut ausgeführt? Das wiederum erklärt, warum es immer 30 Sekunden dauert, erklärt aber nicht, warum immer der gleiche Speicher verwendet wird?
Danke schonmal & viele Grüße,
Martin
Weiß jemand von euch, wie JPA mit Hibernate als Implementierung intern mit Query.setFirstResult() und Query.setMaxResults() umgeht? Es ist so, ich hab eine Query, die ungefähr 20.000 Datensätze liefert. Die Abfrage dauert ca. 30 Sekunden. Begrenze ich die Abfrage auf ca. 1.000 Datensätze mit Query.setFirstResult(0) und Query.setMaxResults(1000) dauert die Abfrage ebenfalls 30 Sekunden. Das ist ja noch nicht das Problem, das liegt denke ich mal auch an der Datenbank und nicht an JPA/Hibernate.
Was mich nur wundert ist, dass selbst die Abfrage auf nur 1.000 Datensätze genausoviel Speicher braucht? Nur dann frage ich mich, wieso es wieder 30 Sekunden dauert, wenn ich setFirstResult(1000) ausführe und mir nochmals das Ergebnis geben lasse.
Kann mir jemand erklären wie JPA/Hibernate das intern übersetzt und damit umgeht? Holt sich der immer die komplette Liste und teilt es dann auf? Das würde erklären, warum immer der gleiche Speicher verwendet wird. Erklärt aber nicht, warum die nächste Result-List wieder 30 Sekunden auf sich warten lässt (intern wäre ja die ganze Liste vorhanden).
Oder wird jedesmal die Query erneut ausgeführt? Das wiederum erklärt, warum es immer 30 Sekunden dauert, erklärt aber nicht, warum immer der gleiche Speicher verwendet wird?
Danke schonmal & viele Grüße,
Martin