Spring Data JPA einsetzen statt Update
Hallo ich bin neu Zweig Data JPA und ich Frage mich, auch wenn ich übergeben Sie die Id der Entität, die Spring data jpa eingefügt wird, statt Zusammenführen. Ich dachte, wenn ich die Umsetzung der Dauerhafte - Schnittstelle und implementieren, die zwei Methoden:
public Long getId();
public Boolean isNew();
Wird es automatisch zu verbinden, anstatt weiterhin bestehen.
Ich habe eine entity-Klasse namens " User wie:
@Entity
@Table(name = "T_USER")
public class User implements Serializable, Persistable<Long> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "USER_ID")
private Long id;
@Column(name = "CREATION_TIME", nullable = false)
private Date creationTime;
@Column(name = "FIRST_NAME", nullable = false)
private String firstName;
@Column(name = "LAST_NAME", nullable = false)
private String lastName;
@Column(name = "MODIFICATION_TIME", nullable = false)
private Date modificationTime;
Haben und eine andere Klasse
@Entity
@Table(name = "T_USER_ROLE")
public class UserRole implements Serializable, Persistable<Long> {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long roleId;
@Column(name = "ROLE_NAME")
private String userRole;
}
Habe ich ein benutzerdefiniertes repository genannt UserRepostory erweitern JpaReopistory. Ich bin zu schlagen, das sparen für die Zusammenführung und bestehen-wie sehe ich die Umsetzung zeigen, dass Spring Data Jpa nutzt die beiden oben genannten Methoden, um entweder update oder insert.
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
Habe ich versucht herauszufinden, aber nicht bekommen, keine Ahnung. Vielleicht haben Sie
Jungs helfen können.
save
Frühjahr und Daten übernimmt das für Sie.InformationsquelleAutor Rossi Robinsion | 2014-12-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich lief in dieses Problem, versucht zu implementieren
Persistable
ohne Erfolg, und schaute dann in die Spring Data JPA Quelle. Ich muss nicht unbedingt sehen, das in deinem Beispiel-code, aber ich habe eine@Version
Feld in meiner Person. Wenn es eine@Version
Feld Frühjahr Daten zu testen, wird , dass Wert, um zu bestimmen, wenn die Einheit neu ist oder nicht. Wenn die@Version
Bereich ist nicht primitiv, und null ist dann die Einrichtung ist als neu.Dieser warf mich für eine lange Zeit in meinen tests, weil ich mich nicht festlegen das Feld version in meiner Darstellung aber nur auf die persistenten entity. Ich sehe auch nicht ein, diese dokumentiert, der in der sonst hilfreich Spring Data docs (das ist ein anderes Thema...).
Hoffe, das hilft jemand!
Ich habe genau das gleiche Problem und ist nicht für @Version Anmerkungen...
Vielen Dank für diese Antwort stieß ich auf das gleiche Problem!
In Bezug auf das Thema mit
@Version
bekam ich etwa, dass durch das hinzufügen der Java-Validierung@Null
annotation, die Zuweisung eines niedrigen Standardwert für das Feld "version", und das entfernen der setter für das Feld "version". So wird das Feld niemals null. Ich bin mit einem Instant-Klasse@Version
Feld.InformationsquelleAutor John Shields
Standardmäßig Spring Data JPA prüft die id-Eigenschaft des angegebenen entity. Wenn die id-Eigenschaft ist
null
, dann ist die Entität übernommen werden, als neue, sonst nicht neues. Es istId-Property inspection
ReferenzWenn du mit Spring JPA mit
EntityManeger
aufrufen.merge()
aktualisiert Ihre entuty und.persist()
einfügen.Gibt es keine Notwendigkeit zur Umsetzung der
Persistable
- Schnittstelle.Wie gesagt, ich bin in Spring Data Jpa und früher eigenen dao-Layer. Ich habe die Art und Weise, die Sie, wie oben erwähnt, durch übergabe des entityManager im dao-Implementierung. Das funktioniert gut, aber meine Frage ist, warum funktioniert es nicht im Kontext von Spring data Jpa.
InformationsquelleAutor njjnex