Viele DTOs in hibernate IdentityMap

haemi

Mitglied
Hallo zusammen,

ich habe eine Query, in der sehr viele Objekte (einige 100'000) geladen werden, was den Heap stark ansteigen lässt; auch, weil in Hibernates IdentityMap Referenzen gehalten werden, wie ich im Profiler gesehen habe.

Wie kann ich verhindern, dass Hibernate diese Objekte referenziert? Ich bin mir ziemlich sicher, dass das für meine Applikation unnötig ist - ich möchte diese Objekte in einer Transaktion laden und fertig.

Ich habe schon versucht, setReadOnly(true) auf der Query zu setzen - aber leider ohne Erfolg.

Vielen Dank,

Hämi
 
Schau mal:

ScrollableResult

Wenn du dadurch iterieren willst kann man im nachinein auf jedes VO release oder so aufrufen, dann wird das nicht mehr von Hibernate gehalten.
 
Schau mal:

ScrollableResult

Wenn du dadurch iterieren willst kann man im nachinein auf jedes VO release oder so aufrufen, dann wird das nicht mehr von Hibernate gehalten.

danke für deine Antwort!

das heißt aber, dass die IdentityMap zumindest einmal abgefüllt wird... gibt es keine Möglichkeit, das schon im voraus zu verhindern?
 
Bei einem scrollable result wird das Objekt erst geladen, wenn man es mit next() holt.

Das heißt, dass du zu begin erstmal keinen Speicherverbrauch hast.

Ich benutze das um zehntausend Datensätze und mehr individuell zu bearbeiten.

Mit dem Aufruf "release" oder so kannst du anschließend auch das Objekt dereferenzieren und somit den Speicher beim gc frei geben...

Ansosnten noch das:

http://www.java-forum.org/data-tier/73116-hibernate-identitymap-identitymapentry.html
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben