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
- Hibernate Single Table Strategy
- Definieren des Ruhezustands.cfg.xml
- Testen der Einzeltabellenstrategie
- Vorteile der Einzeltischstrategie
- Nachteile der Einzeltabellenstrategie
- Hibernate-Tabelle pro Klassenstrategie
- Testtabelle pro Klassenstrategie
- Vorteile der Tabelle pro Klassenstrategie
- Nachteile der Tabelle pro Klassenstrategie
- Hibernate Joined Table Strategy
- Testen der verknüpften Tabellenstrategie
- Vorteile der verknüpften Tabellenstrategie
- Nachteile der verbundenen Tabellenstrategie
- Schlussfolgerung
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.