Spring Data JPA Einfügen statt Update

9

Hallo, ich bin neu in Sprig Data JPA und ich frage mich, obwohl ich die ID an die Entität übergebe, die Spring-Daten, die jpa anstelle von merge einfügt. Ich dachte, wenn ich die Persistable Schnittstelle implementieren und die zwei Methoden implementieren:

%Vor%

Es wird automatisch zusammengeführt anstelle von persist.

Ich habe eine Entitätsklasse namens User like:

%Vor%

Und eine andere Klasse haben

%Vor%

Ich habe ein benutzerdefiniertes Repository namens UserRepostory, das JpaReopistory erweitert. Ich treffe das Speichern für Merge und bleibe bestehen, wie ich die Implementierung zeige, dass Spring Data Jpa über zwei Methoden entweder zu aktualisieren oder einfügen verwendet.

%Vor%

Ich habe versucht herauszufinden, aber habe keine Ahnung. Vielleicht du Jungs können helfen.

    
Rossi Robinsion 28.12.2014, 04:05
quelle

2 Antworten

20

Ich bin auf dieses Problem gestoßen, habe versucht, Persistable vergeblich zu implementieren und habe dann die Spring Data JPA-Quelle untersucht. Ich sehe das nicht unbedingt in Ihrem Beispielcode, aber ich habe ein @Version -Feld in meiner Entität. Wenn ein @Version -Feld vorhanden ist, testet Spring Data den Wert that , um festzustellen, ob die Entität neu ist oder nicht. Wenn das Feld @Version kein primitives Element ist und null ist, wird die Entität als neu betrachtet.

Dies hat mich für eine lange Zeit in meinen Tests gestört, weil ich das Versionsfeld nicht in meiner Repräsentation, sondern nur in der persistenten Entität gesetzt habe. Ich sehe auch nicht, dass dies in den ansonsten hilfreichen Spring Data-Dokumenten dokumentiert ist (was ein anderes Problem ist ...).

Ich hoffe, dass es jemandem hilft!

    
John Shields 07.05.2015, 15:20
quelle
2

Standardmäßig überprüft Spring Data JPA die Bezeichnereigenschaft der angegebenen Entität. Wenn die Bezeichnereigenschaft null ist, wird die Entität als neu angenommen, andernfalls als nicht neu. Es ist Id-Property inspection Referenz

Wenn Sie Spring JPA mit EntityManeger aufrufen, wird% code_de% Ihre Entity aktualisieren und .merge() wird eingefügt.

%Vor%

Die .persist() Schnittstelle muss nicht implementiert werden.

    
njjnex 28.12.2014 07:57
quelle

Tags und Links