Hibernate: CascadeType.ALL bei N:M Beziehungen? Ich bin verwirrt!

DarthShader

Erfahrenes Mitglied
Hallo zusammen,

ich bin gerade etwas Verwirrt von Hibernate. Es gibt ja diese Cascade-Funktionalität für Tabellenbeziehungen (z.B. "CascadeType.ALL").

Als einfachstes Beispiel eine Kunden und eine Adress-Tabelle mit einer 1:1 Beziehung: Ein Kunde hat genau eine Adresse. Verwendet man also CascadeType.ALL, so bedeutet das, dass bei der Löschung (oder Aktualisierung, Persistierung etc.) ebenfalls auch die zugehörige Adresse von Hibernate gelöscht wird.

Soweit nichts neues und nicht schwer zu verstehen. Auch das Folgende ist noch recht verständlich: Das Cascade Verhalten bei einer 1:N Beziehung. Als Beispiel dient ihr eine Kunden-Tabelle und eine Bestellungen-Tabelle. Typische 1:N Beziehung wäre, dass 1 Kunde mehrere Bestellungen haben kann.

Was passiert nun, wenn der Kunde gelöscht wird? Klar, alle seine Bestellungen müssten auch mit gelöscht werden.

Und nun das, was ich nicht nachvollziehen kann: eine N:M Beziehung! Beispiel: Ein Fahrzeug hat z.B. mehrere Standorte, jedoch kann einem Standort auch mehrere Fahrzeuge zugeordnet werden. Also N:M.

Was aber nun, wenn ein Fahrzeug gelöscht wird? Dann können ja nicht alle seine Standorte gelöscht werden, weil diese möglicherweise noch von anderen Fahrzeugen referenziert werden. Wenn ich ein Standort lösche, können aber nicht alle dem Standort zugehörigen Fahrzeuge löschen, weil diese ja vielleicht noch zu anderen Standorten gehören.

Funktioniert also das Kaskadierende Löschen der Daten nicht bei einer N:M Beziehung? Oder habe ich vielleicht einen totalen Denkfehler?

Ich würde mich über Hilfe wirklich sehr freuen


Vielen Dank!
 
Zurück