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.
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!
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.
Die .persist()
Schnittstelle muss nicht implementiert werden.
Tags und Links jpa spring-data-jpa spring