Dieser Artikel behandelt die Vererbung im Ruhezustand. Hier werden wir über die verschiedenen Vererbungsstrategien sprechen, die von Hibernate unterstützt werden, wie z. B. Single Table Strategy, Table per Class Strategy und Joined Strategy zusammen mit ihren Vor- und Nachteilen. Wir werden Codebeispiele für jede Strategie erstellen und ihr Verhalten ausführlich diskutieren.

Hintergrund

Wie wir wissen, ist Java eine objektorientierte Sprache und unterstützt daher die Vererbung. In der Java-Vererbung kann es eine IS-A- oder HAS-A-Beziehung geben. Aber wenn wir zu einem relationalen Modell kommen, unterstützt es nur HAT-Eine Beziehung. Um dieses Mimmatch zu überwinden, bietet Hibernate eine andere Vererbungsstrategie. Es gibt grundsätzlich 3 Arten von Hibernate-Strategie wie folgt.

1. Einzeltabelle Strategie

2. Tabelle pro Klassenstrategie

3. Verbundene Tabellenstrategie

Lassen Sie uns nun nacheinander über diese 3 Strategien diskutieren. In den folgenden Beispielen haben wir 3 verschiedene Entitäten. Die übergeordnete Entität Employee.java wird um 2 weitere Entitäten PermanentEmployee.java und ContractEmployee.java

Hibernate Single Table Strategy

Im Falle einer Single Table Strategy wird pro Vererbungshierarchie eine einzelne Tabelle erstellt. Zum Beispiel haben wir die Employee-Klasse, die um 2 andere Klassen erweitert wird, aber wenn es um eine einzelne Tabellenstrategie geht, wird eine einzelne Tabelle erstellt, die alle Klassen pro Vererbungshierarchie darstellt, und diese Tabelle enthält alle Daten, die sich entweder auf Employee oder ContractEmployee oder PermanentEmployee beziehen.

Es stellt sich also die Frage, ob alle Einträge in einer einzigen Tabelle vorgenommen werden und wie wir diese Zeilen aus der Objektperspektive identifizieren können. Zu diesem Zweck stellt hbernate eine Spalte vom Diskriminatortyp (DType) zur Verfügung, mit der diese Datensätze unterschieden werden können. Diese Konfiguration basiert vollständig auf Anmerkungen. Lassen Sie uns also unsere Entitäten definieren und die Vererbung im Ruhezustand mit einer einzelnen Tabellenstrategie implementieren.

 Other Interesting PostsSpring Hibernate Integration Example with JavaConfigObject Relational Mapping in JavaHibernate Different Annotations ExampleHibernate One to Many Mapping ExampleHibernate One to Many Relationship ExampleHibernate Many to Many Relationship Example

Mitarbeiter.java festangestellter Mitarbeiter.java ContractEmployee.java

@Inheritance – Es wird verwendet, um die Art der Vererbung zu definieren, die im Ruhezustand verwendet wird, und es wird in der übergeordneten Klasse definiert. Wenn die Vererbungsanmerkung nicht angegeben ist oder wenn für eine Entitätsklassenhierarchie kein Vererbungstyp angegeben ist, wird die Zuordnungsstrategie SINGLE_TABLE verwendet.

@DiscriminatorValue – Diese Anmerkung wird verwendet, um den Spaltennamen DType anzugeben. Hier haben wir es als PERMANENT_EMP im Fall von PermanentEmployee.java und CONTRACT_EMPLOYEE im Fall von ContractEmployee.java definiert. Die DiscriminatorValue Annotation kann nur für eine konkrete Entitätsklasse angegeben werden. Wenn DiscriminatorType STRING ist, ist der Diskriminatorwert standardmäßig der Entitätsname.

Definieren des Ruhezustands.cfg.xml

Testen der Einzeltabellenstrategie

Definieren wir die Anwendung.java hat eine main-Methode, um das Beispiel auszuführen und die Einträge anzuzeigen, die es in der DB

-Anwendung erstellt hat.java

Wenn Sie die Java-Anwendung der obigen Klasse a ausführen, können Sie Einträge sehen, die in der Datenbank erstellt wurden. Seitdem haben wir keinen bestimmten Wert für die DTYPE Spalte in Employee definiert.java, standardmäßig Hibernate nannte es als Entitätsklassenname.

Vorteile der Einzeltischstrategie

Am einfachsten zu implementieren.

Nur eine Tabelle zu behandeln.

Leistungsmäßig besser als alle Strategien, da keine Verknüpfungen oder Unterauswahlen durchgeführt werden müssen.

Nachteile der Einzeltabellenstrategie

Die meisten Tabellenspalten können auf Null gesetzt werden, sodass die NOT NULL-Einschränkung nicht angewendet werden kann.

Tabellen sind nicht normalisiert.

Hibernate-Tabelle pro Klassenstrategie

Im Falle einer Tabelle pro Klassenstrategie gibt es keine. von Tabellen, die äquivalent zur exakten Nr. von konkreten Entitäten, die in der Vererbungshierarchie definiert sind. Daher werden in unserem Fall 3 verschiedene Tabellen erstellt und jede untergeordnete Tabelle enthält doppelte Daten ihrer übergeordneten Tabelle. Daher wird diese Strategie nicht empfohlen. Definieren wir dieselben Entitäten neu, um die Strategie für Tabellen pro Klasse zu berücksichtigen.

Mitarbeiter.java ContractEmployee.java festangestellter Mitarbeiter.java

In diesem Fall ist die Diskriminatorspalte nicht erforderlich, da alle Entitäten eine eigene Tabelle haben. In dieser Strategie verwenden Sie eine Tabelle pro Klasse und jede hat eine ID. Daher funktioniert der Generierungstyp auto hier nicht.

Testtabelle pro Klassenstrategie

Die Anwendung.java bleibt unverändert. Führen Sie diese Klasse als Java-Anwendung aus und überprüfen Sie die in DB erstellten Einträge gemäß Tabelle pro Klassenstrategie.

Vorteile der Tabelle pro Klassenstrategie

Sie können NOT NULL-Einschränkungen für die Tabelle definieren.

Nachteile der Tabelle pro Klassenstrategie

Tabellen sind nicht normalisiert.

Select-Anweisungen benötigen mehr Zeit, um ausgeführt zu werden, da die UNION-Operation angewendet wird.

Hibernate Joined Table Strategy

Bei dieser Strategie werden alle Einträge in der Datenbank in einer Tabelle erstellt, die der entsprechenden Tabelle der übergeordneten Entität entspricht, und die den untergeordneten Entitäten entsprechenden Tabellen verweisen darauf. Wenn Sie dies verwirrt, lassen Sie uns zuerst unsere Entitäten definieren und die DB-Struktur schnell sehen, um sie besser zu verstehen.

Mitarbeiter.java ContractEmployee.java festangestellter Mitarbeiter.java

Die einzige Änderung in der Entitätsdefinition ist hier die Art der Strategie, die in Employee.java

Testen der verknüpften Tabellenstrategie

Die Anwendung.java bleibt unverändert. Führen Sie diese Klasse als Java-Anwendung aus und überprüfen Sie die in DB erstellten Einträge.

Vorteile der verknüpften Tabellenstrategie

Tabellen werden normalisiert.

Sie können NOT NULL-Einschränkungen definieren.

Nachteile der verbundenen Tabellenstrategie

Geringe Leistung, da sowohl OUTER JOIN als auch INNER JOIN in ausgewählten Elementen ausgeführt werden.

Schlussfolgerung

Posted on

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.