Da dies eine sehr häufige Frage ist, basiert diese Antwort auf einem Artikel, den ich in meinem Blog geschrieben habe.
Entitätsladezustand
Wenn Sie eine Entität abrufen, versucht Hibernate, sie entweder aus dem Cache der zweiten Ebene oder aus der Datenbank zu laden.
Wenn die Entität nicht im Cache der zweiten Ebene gespeichert ist, wird eine Abfrage ausgeführt und der JDBC ResultSet
wird in eine Abfrage umgewandelt Object[]
, die die Entitätseigenschaftswerte der Ladezeit enthält.
Der Cache der zweiten Ebene speichert dies, Object[]
wenn eine Entität zwischengespeichert wird. Wenn Sie also eine Entität entweder aus der Datenbank oder aus dem Cache der zweiten Ebene laden, erhalten Sie das Object[]
Entity-Eigenschaftswert-Array.
Der Prozess der Umwandlung des Object[]
geladenen Zustands in ein Java-Entitätsobjekt wird als Hydratation bezeichnet und sieht folgendermaßen aus:
final Object[] values = persister.hydrate(
rs, id, object,
rootPersister, cols, eagerPropertyFetch, session
);
Der geladene Status wird im aktuell ausgeführten Persistenzkontext als EntityEntry- Objekt gespeichert und später für den Standardmechanismus für die schmutzige Überprüfung verwendet , bei dem die aktuellen Entitätsdaten mit dem Ladezeit-Snapshot verglichen werden.
Der geladene Status wird auch als Cacheeintragswert für den Entitätscache der zweiten Ebene verwendet.
Die umgekehrte Operation der Entität an eine Transformation , Object[]
die verwendet wird, wenn für die SQL - Parameterwerte Bindung INSERT
, UPDATE
oder DELETE
Aussagen heißt Dehydratation .