Viele bis viele Hibernate inverse Seite ignoriert

7

Hi, ich lese die Winterschlaf-Dokumentation.

Ссылка

  

Eine Viele-zu-Viele-Assoziation wird logisch unter Verwendung von @ManyToMany definiert   Anmerkung. Sie müssen auch die Zuordnungstabelle und die   Fügen Sie Bedingungen mithilfe der Annotation @JoinTable hinzu. Wenn die Assoziation ist   bidirektional, eine Seite muss der Eigentümer sein und eine Seite muss die sein   inverses Ende (dh es wird ignoriert, wenn die Beziehung aktualisiert wird   Werte in der Assoziationstabelle):

Ich verstehe alles außer dem letzten

  

(dh es wird ignoriert, wenn die Beziehungswerte in der Zuordnungstabelle aktualisiert werden).

Was bedeutet das? Beispiel?

    
pethel 23.09.2012, 13:24
quelle

2 Antworten

22

Angenommen, Sie haben folgende Entitäten:

%Vor%

Die Eigentümerseite ist Student (weil sie nicht das mappedBy -Attribut hat). Die umgekehrte Seite ist Course ((weil es das Attribut mappedBy hat).

Wenn Sie Folgendes tun:

%Vor%

Hibernate fügt einen Eintrag für Student 4 und Kurs 3 in der Join-Tabelle hinzu, da Sie die Eigentümerseite der Assoziation aktualisiert haben ( student.courses ).

Wenn Sie Folgendes tun:

%Vor%

Es wird nichts passieren, weil Sie die inverse Seite der Assoziation aktualisiert haben ( course.students ), aber die Eigentümerseite nicht aktualisiert hat. Hibernate berücksichtigt nur die Eigentümerseite.

    
JB Nizet 23.09.2012, 14:15
quelle
2

Damit es in beide Richtungen funktioniert, müssen Sie zwei getrennte Beziehungen zwischen Ihren Entitäten haben. Dies kann durch eine Join-Tabelle in der Datenbank dargestellt werden, aber standardmäßig wird sie durch zwei dargestellt, so dass Sie explizit angeben müssen, dass Sie eine Join-Tabelle haben möchten.

Ich werde es unter Verwendung des zuvor erwähnten Modells von Student und Kurs demonstrieren.

%Vor%

Im obigen Beispiel haben wir 2 Beziehungen mit jeder Seite der Beziehung Student - & lt; - Course, die Eigentümer einer Relation ist. Dies löst das Problem, Änderungen an der Datenbank nur auf der Eigentümerseite zu speichern, da jede Seite der Eigentümer einer Beziehung ist.

Aber wir müssen uns eine Tatsache merken, dass Beziehungssammlungen nach dem Speichern von Daten NICHT aus der Datenbank geladen werden Also muss der Programmierer die Beziehungssammlungen selbst verwalten. Wenn ich das sage, möchte ich sagen, dass der einfachste Weg ist Ändern Sie die Setter für Beziehungssammlungen, um den Zyklus zwischen Entitäten wie diesem neu zu erstellen:

%Vor%     
termil0r 01.01.2014 17:12
quelle

Tags und Links