Ich habe eine einfache Assoziation zwischen zwei Entitäten - Category
und Email
(NtoM). Ich versuche, Web-Interface zum Durchsuchen und Verwalten von ihnen zu erstellen. Ich habe ein einfaches E-Mail-Abonnement-Bearbeitungsformular mit einer Liste von Kontrollkästchen, die Kategorien darstellen, zu denen die angegebene E-Mail gehört (ich habe den Eigenschaftseditor für Set<Category>
type registriert).
Die Formularanzeige funktioniert gut, einschließlich der Markierung momentan zugewiesener Kategorien (für vorhandene E-Mails). Aber keine Änderungen werden in der EmailsCategories-Tabelle gespeichert (NtoM-Mapping-Tabelle, die mit @JoinTable
definiert ist - es werden weder neu überprüfte Kategorien hinzugefügt noch ungeprüfte Kategorien entfernt.)
E-Mail-Entität:
%Vor%Kategorieentität:
%Vor%Controller:
%Vor%Formularansicht:
%Vor% ( emailService.save()
ist nur ein Proxy-Aufruf an emailDao.save()
)
Ein einfaches Test-Snippet:
%Vor%}
Und das sind Protokolle:
%Vor%Auch bei diesen Protokollen scheint es etwas strapazierfähig zu sein - es zeigt an, dass es die Sammlung mit einem Element einfügt, aber dann sagt es, es sei leer ...
Hier gehen wir wieder.
Eine bidirektionale Assoziation hat zwei Seiten: eine Eigentümerseite und eine umgekehrte Seite. Die Eigentümerseite ist das ohne Attribut mappedBy. Um zu wissen, welche Verknüpfung zwischen Entitäten besteht, kümmert sich JPA / Hibernate nur um die Eigentümerseite. Ihr Code ändert nur die inverse Seite und nicht die Eigentümerseite.
Es ist IHRE Aufgabe, die Kohärenz des Objektgraphen zu wahren. Es ist manchmal akzeptabel, ein inkohärentes Objektdiagramm zu haben, aber das Ändern der Eigentümerseite wird die Änderungen nicht dauerhaft machen.
Sie müssen also
hinzufügen %Vor%oder E-Mail als Eigentümerseite anstelle von Kategorie auswählen.
Tags und Links jpa hibernate spring-mvc many-to-many hibernate-mapping