FPC wrote:
Aber wenn ich Sie nur aus dem Set entferne und speichere so werden doch im Normalfall nicht nur die n:m-Tabelle entsprechende geleert sondern auch das referenzierte Objekt wird gelöscht oder? Das ist hat bisher meine Erfahrung, da dann halt immer ein ForeignKey-Constrint anschlägt wenn es ans Löschen geht.
Oder kann ich das Löschen des referenzierten Objektes beim Löschen der Beziehung über das inverse="false" verhindern, sprich nur die Beziehung ist weg? Ich habe noch nicht ganz realisiert, was ich mit diesem Attribut eigentlich steuere.
n:n Beziehungen benötigen immer eine Zwischentabelle, die jeweils beide Foreignkeys enthalten. Wird die Beziehung aufgelöst, so wird eben nur der Eintrag aus der Zwischentabelle gelöscht. Die Objekte selbst bleiben erhalten.
1:n Beziehungen mit einer ForeignKey-Spalte werden automatisch auf Null gesetzt, wenn ein entsprechendes Objekt aus der Collection (Set) entfernt wird.
Mit "inverse" sagst Du Hibernate, daß das die Seite einer Bidirektionalen Verknüpfung ist, die Hibernate ignorieren soll. Das hindert Dich aber nicht daran eine gültige Verknüpfung ohne inverse herzustellen. Ein Löschen verhinderst du damit zwar implizit auch, ist aber nicht Aufgabe dieses Attributs.
In Hibernate gibt es das delete-orphan für das cascade-Attribut. Das heißt dann explizit, daß alle Objekte, die mit dem zu löschenden verknüpft sind auch gelöscht werden. Nur dann wird der Foreign-Key bei 1:n nicht auf Null gesetzt sondern wie gesagt gleich das ganze Objekt mitgelöscht.
Thomas