Training, Workshops, Softwareentwicklung

Hibernate Tutorial

Speicherbedarf und Performance

Am Anfang des Kapitels haben wir gelernt, dass Hibernate beim flush Änderungen erkennt und persistiert. Damit das möglich ist, speichert Hibernate zusätzlich zu dem Objekt im Persistence Context den Zustand der Tabellenspalten von dem Moment, in dem der Datensatz gelesen wurde. Hibernate nennt das den "hydrated snapshot".

diag snapshot

Beim flush wird jede Entity mit Ihrem hydrated snapshot verglichen, um Änderungen zu erkennen. Beim merge wird ein hydrated snapshot aus der Datenbank erstellt.

diag flush

Daraus ergeben sich folgende Schlussfolgerungen:

  • Der Snapshot benötigt zusätzlichen Speicherbedarf.

  • Je mehr Objekte sich im Persistence Context eines EntityManagers befinden, desto aufwändiger wird der Vergleich beim flush.

Das sind zwei wichtige Gründe, warum man einen EntityManager nur kurz benutzt und möglichst für jede Transaktion einen neuen erstellt.

Wenn Ihr es nochmal genau sehen wollt, seht Euch den Screencast an: