Hallo Hibernate-Experten,
ich bitte um Hilfe bei folgendem Problem:
Ich habe eine Tabelle mit sehr vielen Datensätzen die ich alle einlesen muss um sie iterativ zu verarbeiten.
Der Hauptspeicher reicht nicht aus, um alle gleichzeitig in den Hauptspeicher zu laden.
Aus Performencegründen wäre es jedoch (imho) am besten alles mit nur einer Query abzufragen
Mit reinen JDBC geht das meiner Erfahrung nach problemlos:
Dazu mal hoffentlich verständlicher Pseudocode:
1. Resultset RS erstellen mit z.b Fetchsize =1000 (somit sind nur max 1000 Objekte beim Client)
2. Einen Datensatz aus dem RS auslesen und auf das DomainObject JObj mappen
3. JObj verarbeiten
4. Schritt 2-4 wiederholen bis RS leer
In Hibernate hab ich nachdem ich die Query erzeugt habe
Code:
lQuery = getHibernateSessionForReadAccess().createQuery(pQuery.toString());
entweder die Möglichkeit
1) Das ganze Resultset auf einmal auszulesen zu lassen
Code:
lResultList = lQuery.list();
oder
2) mir direkt ein Resultset geben zu lassen
Code:
ScrollableResults rs = lQuery.scroll();
Dann muss ich aber selber mappen, womit ja ein grosser Vorteil von Hibernate verloren geht.
Gibt es eine Möglichkeit
Quote:
2. Einen Datensatz aus dem RS auslesen und auf das DomainObject JObj mappen
analog jdbc mit Hibernate umzusetzten? Oder ist mein Ansatz evlt generell falsch?
Vielen Dank im Vorraus
Lhori