Es besteht die Möglichkeit, die @OneToMany
Beziehungs-Join-Tabelle mit der @JoinColumn
Annotation zu deaktivieren. Der Standardwert ist eine Join-Tabelle.
Was sind die Vor- und Nachteile für ein Produktionssystem zum Beispiel?
Wann sollte ich eine Join-Tabelle verwenden und wann nicht?
Danke.
Standardmäßig erstellt @OneToMany
nur dann eine Join-Tabelle, wenn Sie die unidirektionale Beziehung verwenden.
Mit anderen Worten, wenn Sie die Entitäten Employee
und Project
haben und die Entität Employee
wie folgt definiert ist (vorausgesetzt, es gibt keine orm.xml
Einträge für diese Entitäten) :
Der JPA-Anbieter erstellt eine Join-Tabelle (Beachten Sie, dass in mappedBy
Annotation kein @OneToMany
-Attribut vorhanden ist, da es keinen Verweis auf Employee
-Entität von Project
gibt).
Wenn Sie andererseits eine bidirektionale Beziehung verwenden:
%Vor%Die Join-Tabelle wird nicht verwendet, da dort die Seite "many" verwendet wird, um den Fremdschlüssel für diese Beziehung zu speichern.
Sie können jedoch die Verwendung der Join-Tabelle auch dann erzwingen, wenn Sie eine bidirektionale @OneToMany
-Beziehung mit dem definierten mappedBy
-Attribut haben. Sie können dies mithilfe der @JoinTable
Annotation auf der besitzenden Seite der Beziehung erreichen .
Es besteht auch die Möglichkeit, wie bereits erwähnt, @JoinColumn
zu verwenden, wenn die Join-Tabelle standardmäßig verwendet wird (unidirektionale @OneToMany
-Beziehung).
Es ist am besten, den Leistungsunterschied der FK zu testen und für sich selbst zu arbeiten. Ich kann nur vermuten, dass weniger Joins (in diesem Fall: FK) scheint eine bessere Leistung zu haben.
Außerdem definiert der DBA manchmal das Datenbankschema und Sie müssen nur Ihre Zuordnungen an das vorhandene Schema anpassen. Dann haben Sie keine Wahl über FK oder Join Tabelle - deshalb haben Sie die Wahl.
Wie in den obigen Kommentaren erwähnt, wird Hibernate standardmäßig für Join-Tabelle verwendet. Dies führt zu einer besseren Normalisierung der Datenbasis.
Wenn Sie eine Auswahlmöglichkeit haben, bietet JoinColumn eine bessere Performance über die Join-Tabelle, wenn die Notwendigkeit für das Hinzufügen einer zusätzlichen Tabelle in der SQL-Abfrage aufgehoben wird.
Join-Tabellen werden für Polymorphismen benötigt. Wenn beispielsweise Employee und Manager dasselbe Projekt verknüpfen und sie mit einer Strategie für eine Tabelle pro Klasse verknüpft sind, bezieht sich die einzige Möglichkeit, das Projekt zu kennen (id = 1, emp_id = 10) auf relationale DB-Ebene auf einen Manager Geben Sie emp_id in die Tabelle manager_2_employee ein. Wenn man sich nicht in einer solchen Situation befindet, kann emp_id direkt in das Projekt gehen.
Tags und Links jpa-2.0 eclipselink mapping one-to-many