Klären der Terminologie - Was bedeutet das „Hydratisieren“ einer JPA- oder Hibernate-Entität beim Abrufen der Entität aus der Datenbank?

76

Im Zusammenhang mit ORM / Lazy Loading von Entitäten verstehe ich den Begriff "Hydratation" wie folgt:

"Hydrating" beschreibt den Vorgang des Auffüllens einiger oder aller zuvor nicht aufgefüllten Attribute einer Entität, die durch verzögertes Laden abgerufen wurden.

Beispiel: Klasse Authorwird aus der Datenbank geladen:

@Entity
class Author
{
     @Id
     long id;
     List<Book> books;
}

Die booksSammlung ist zunächst nicht gefüllt.

Nach meinem Verständnis wird der Vorgang des Ladens der booksSammlung aus der Datenbank als "Hydratisieren" der Sammlung bezeichnet.

Ist diese Definition korrekt und ist der Begriff alltäglich? Gibt es einen anderen häufigeren Begriff, den ich für diesen Prozess verwenden sollte?

Marty Pitt
quelle
3
Zu der Person, die für das Schließen der Frage gestimmt hat: Ich habe ein Beispiel hinzugefügt, um zu klären, was ich frage. Bitte kommentieren Sie, wenn es noch unklar ist und lassen Sie mich wissen, was ich klären könnte.
Marty Pitt

Antworten:

130

Hydrat begann als Begriff für das Auffüllen eines instanziierten (aber leeren) Wertobjekts / Modells aus einer Datenbank (speziell im Ruhezustand).

Verschiedene andere ORMs und Tools wie BizTalk verwenden Hydrate und andere verwandte Begriffe (z. B. verwendet BizTalk den Begriff Dehydrated, um zu bedeuten, dass eine Instanz verfügbar, aber noch nicht gefüllt ist.)

Persönlich bin ich redundanten Terminologieüberholungen abgeneigt, bevölkert bedeutet dasselbe, ohne die Sprache neu zu erfinden. Es fügt nichts hinzu und führt zu Verwirrung (allgemeiner erster Gedanke bei der Begegnung mit neu erfundenen Begriffen: Ist das irgendwie anders und magisch? ).

Die BizTalk-Erweiterung dieses Sprachstils, insbesondere Dehydrated, ist überflüssig. Ich gehe davon aus, dass die Leute nicht vergessen haben, wie man sagt, leer oder klar ?

Hydrated und die damit verbundenen Metaphern sind im Wesentlichen Marketinginstrumente, die entwickelt wurden, um Hibernate von Konkurrenzprodukten zu unterscheiden.

Zu diesem Zeitpunkt verwenden Hibernate und andere ORM-Produkte diese Begriffe seit vielen Jahren, sodass Hydrat (und Dehydrat) hier bleiben werden.

ocodo
quelle
18
Natürlich ist es das erste, es ist einfach und als solches weit weniger verworren. Vielleicht haben Sie an dieser Stelle auch erkannt, dass so ziemlich alles auf der Softwareschicht, sogar ein Bitwert wie "wahr / falsch" oder "1/0", metaphorisch ist ... Sollten wir jetzt anfangen, "wahr" etwas anderes zu nennen? Wie wäre es mit "fast sicher" in Bezug auf Heisenberg?
ocodo
16
Ich denke, "Hydrat" ist eine weitaus bessere Metapher als "bevölkern". Populate erinnert an eine Gruppe von Kolonisatoren, die in ein fremdes oder jungfräuliches Gebiet ziehen und es "bevölkern". Es gibt einen leeren Raum und Sie füllen ihn mit etwas, das nichts damit zu tun hat (aber vermutlich dorthin gehört). Wenn beim Hydratisieren von etwas, beispielsweise einer getrockneten Feige, die Essenz der Substanz vorhanden ist, aber die Fülle fehlt. Genau das passiert, wenn Sie ein Objekt "hydratisieren". Hydrat ist keine ausgezeichnete "Metapher", sondern eine hervorragende Metapher.
Kyle Mathews
4
@KyleMathews Nun, es ist drei Jahre her, seit ich meine Antwort veröffentlicht habe. Ich habe nicht explizit klargestellt, dass "Populated" der bereits existierende Begriff für dieselbe Aktivität ist. Zu diesem Zeitpunkt ist "Hydrated" immer noch ein Randbegriff und ist es auch wird nur in bestimmten Sprach- / Produktkulturen verwendet, während "Populated" als allgemeiner und weiter verbreiteter Begriff bleibt. Verwenden Sie auf jeden Fall "Hydrate", wenn es Ihnen gefällt. Ich persönlich finde es anmaßend und betroffen.
ocodo
18
Wenn Sie "Hydrat" bei Menschen verwenden, die dieses Wort nicht verstehen, müssen Sie es erklären. Warum nicht einfach ein Wort verwenden, das für Ihr Publikum bereits verständlich ist, auch wenn es nicht das genaueste Wort ist, das möglich ist?
Samantha Branham
5
Die Tatsache, dass niemand weiß, was Hydrat bedeuten soll, ohne es nachzuschlagen, zeigt, dass es ein dummes Modewort ist, das leider mittlerweile in vielen ORM-Frameworks verankert ist.
BadHorsie
11

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.

Entitätsladezustand

Wenn die Entität nicht im Cache der zweiten Ebene gespeichert ist, wird eine Abfrage ausgeführt und der JDBC ResultSetwird 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, UPDATEoder DELETEAussagen heißt Dehydratation .

Vlad Mihalcea
quelle
4

Flüssigkeitszufuhr ist ein loser Begriff. In unserem Unternehmen verwenden wir "Rehydratisierung", um alle Objekteigenschaften eines gesamten Objektgraphen zu laden. Hier ist ein Beitrag , der über verschiedene Hydratationsstufen spricht (dies ist wiederum eine allgemeine Verwendung, obwohl sie im Zusammenhang mit dem Winterschlaf verwendet werden).

Aravind Yarram
quelle
2

Ich denke, der Begriff "Hydrat (e)" im Kontext von ORM bedeutet einfach, dass das Framework Ihnen Objekte gibt. Die Objekte werden also vom ORM "hydratisiert", nachdem die Daten aus dem Speicher abgerufen wurden. Der Begriff kann jederzeit angewendet werden, wenn ein ORM-Framework Ihnen ein Objekt / Diagramm liefert, das im Geschäft dargestellt wird.

hvgotcodes
quelle
0

Der Begriff Hydratation wird in den Eingeweiden der Bibliothek im Ruhezustand häufig verwendet, um sich auf den Vorgang des Festlegens der Felder eines kürzlich geladenen Objekts zu beziehen, und hängt in der Tat mit der Objektgraphenpopulation zusammen.
Es unterscheidet sich jedoch von dem Konzept des verzögerten Ladens, dh es gibt dem Benutzer ein halb gefülltes Objekt und lässt den Rest bei Bedarf laden.
Die Flüssigkeitszufuhr wird immer faul oder eifrig durchgeführt und es ist Winterschlaf.
Das verzögerte Laden dient nur der Bequemlichkeit

Ersetzen Sie den Ruhezustand durch den Namen Ihrer Wahl

jpertino
quelle
0

Hydration ist ein allgemeiner ORM-Domänenbegriff, der eine Methode bezeichnet, mit der das Abfrageergebnis zurückgegeben wird. Es ist kein Prozess, kein Verb, keine Handlung oder kein Ereignis, sondern ein Substantiv. Daher Hydratisieren kann nur eine Trink bedeuten verwenden, dh die Verwendung dieser speziellen Methode , sonst nichts und bringt nichts für sich allein deshalb sollte niemals verwendet werden . Eine bestimmte Hydratation kann ein Objekt instanziieren und bevölkern, bevor seine Referenz zurückgegeben wird. Eine Hydratation im Allgemeinen bedeutet jedoch nicht, sie zu bevölkern. Unterschiedliche Hydratationen führen zu unterschiedlichen Strukturen:

  • singulärer Skalar
  • Array von Skalaren
  • Array von Arrays
  • Array von Objekten
  • Objekte, die Skalare sammeln
  • Objektsammel-Arrays
  • Objekt sammelt andere Objekte
  • ...Mehr

Es ist ein Detail der ORM-Implementierung. Einige ORMs bieten mehrere Hydratationen, und Sie können eine auswählen, indem Sie ein Argument an den Abfrage-Generator übergeben. Andere geben Ihnen diese Kontrolle nicht und ersetzen sie durch Konventionen, die versuchen, klug zu sein, was normalerweise zu falschen Annahmen führt.

cprn
quelle