Spring Data REST + JPA aus der OneToMany-Sammlung entfernen [nicht Eigentümerseite]

8

Gegenwärtig haben wir ein Problem (ein bekanntes) mit Spring Data JPA + Spring Data REST ( Hibernate als JPA implementation), wenn wir versuchen, die Sammlung (Relation) zu aktualisieren, die nicht die besitzende Seite ist.

Das Mapping ist das Folgende:

%Vor%

und auf der anderen Seite:

%Vor%

all ist gut auf der Seite Java , wenn Sie nur Spring Data JPA verwenden, jedoch wenn Sie das "Produkt" aktualisieren möchten, indem Sie seine Variantensammlung aktualisieren und senden PATCH Anforderung an Ссылка , die nur die Nutzdaten der neuen Sammlung enthält (mit 2 der 3 Elemente):

%Vor%

Ich bekomme keine Ausnahmen oder irgendetwas, aber da die besitzende Seite die andere Seite ist, bleibt nichts erhalten und ich habe wieder das alte 3 items .

I know , das kann ich durch Einstellen von

beheben %Vor%

auf beiden Seiten und nicht mappedBy verwenden, aber ich habe gehört, dass es eine Implikation der Performance gibt, von der ich nicht sicher bin, wie groß sie ist (wir haben 100+ Entitäten mit @OneToMany ) und ich frage mich, gibt es eine bessere Problemumgehung über @PreUpdate Listener oder etwas?

    
JOKe 20.01.2017, 11:53
quelle

1 Antwort

5

Wie in in diesem Artikel erklärt, müssen Sie synchronisieren beide Seiten der bidirektionalen Assoziation und fügen auch orphanRemoval und Cascade hinzu.

So wird Ihre Zuordnung:

%Vor%

Und die beiden Methoden add / remove:

%Vor%

Damit die remove-Methode ordnungsgemäß funktioniert, müssen Sie equals und hashCode wie in diesem Artikel erklären .

    
Vlad Mihalcea 20.01.2017 12:14
quelle