wake-up-neo.com

Was enthält das Hibernate-Proxy-Objekt?

Alles, was ich von Google erfahren konnte, ist Folgendes:

  • Der Ruhezustand verwendet ein Proxy-Objekt, um das verzögerte Laden zu implementieren. Wenn Sie das Objekt aus der Datenbank laden möchten und das abgerufene Objekt einen Verweis auf ein anderes konkretes Objekt enthält, gibt Hibernate anstelle des konkret zugeordneten Objekts einen Proxy zurück.

  • Hibernate erstellt ein Proxy-Objekt mithilfe der Bytecode-Instrumentierung (bereitgestellt von javassist). Hibernate erstellt zur Laufzeit mithilfe der Codegenerierungsbibliothek eine Unterklasse unserer Entitätsklasse und ersetzt das tatsächliche Objekt durch den neu erstellten Proxy.

Was genau enthält das Proxy-Objekt?

Enthält es ein Skelettobjekt-Referenzobjekt, für das nur das Feld id festgelegt ist? Das andere Feld wird gesetzt, wenn wir die get-Methode aufrufen.

Enthält das Proxy-Objekt die JDBC-Anweisung, um alle Daten abzurufen, die zum vollständigen Auffüllen des referenzierten Objekts erforderlich sind.

Gibt es noch etwas, das mir fehlen könnte?

Ich bitte nicht um Löffelfütterung, aber wenn Sie einen Link mit Informationen zur Verfügung stellen können, wäre das großartig.

Jede Korrektur der obigen Beschreibung wird ebenfalls begrüßt.

Beispiel.

class Address {
   String city;
   String country;
}

class Person{
   int id;
   String name;
   Address address;
}    

Wenn wir versuchen, das Person-Objekt zu laden, wird Hibernate die Person-Klasse wie folgt unterteilen:

class ProxyPerson extends Person {
       int id;
       String name;
       Address proxyCGLIBObject;
}

und geben Sie ein ProxyPerson-Objekt zurück. Das Objekt von ProxyPerson hat einen Wert für id und name, aber einen Proxy für Address.

Hab ich recht?

Was kann ich vom Hinzufügen einer toString () - Methode zum Proxy-Objekt erwarten?

40
vineeshchauhan

Wie in meinem Buch High-Performance Java Persistence erläutert, wird der Hibernate Proxy verwendet, um eine tatsächliche Entität POJO (Plain Old Java Object) zu ersetzen.

Die Proxy-Klasse wird zur Laufzeit generiert und erweitert die ursprüngliche Entitätsklasse.

Im Ruhezustand werden Proxy-Objekte für Entitäten verwendet, um verzögertes Laden zuzulassen.

Beim Zugriff auf grundlegende Eigenschaften des Proxys wird der Aufruf einfach an die ursprüngliche Entität delegiert.

Jeder List, Set, Map Typ in der Entitätsklasse wird durch einen PersistentList, PersistentSet, PersistentMap ersetzt . Diese Klassen sind dafür verantwortlich, einen Aufruf einer nicht initialisierten Sammlung abzufangen.

Der Proxy gibt keine SQL-Anweisung aus. Es wird einfach ein InitializeCollectionEvent ausgelöst, das vom zugeordneten Listener verarbeitet wird und der weiß, welche Initialisierungsabfrage ausgegeben werden soll (abhängig vom konfigurierten Abrufplan).

39
Vlad Mihalcea