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):
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
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?
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 .
Tags und Links java jpa spring-data-jpa hibernate spring