Nun, die Frage sagt so ziemlich alles. Wie aktualisiere ich mit JPARepository eine Entität?
JPARepository hat nur eine Speichermethode , die mir nicht sagt, ob es tatsächlich erstellt oder aktualisiert wird. Zum Beispiel füge ich ein einfaches Objekt in den Datenbankbenutzer ein, das drei Felder enthält : firstname
, lastname
und age
:
@Entity
public class User {
private String firstname;
private String lastname;
//Setters and getters for age omitted, but they are the same as with firstname and lastname.
private int age;
@Column
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
@Column
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
private long userId;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public long getUserId(){
return this.userId;
}
public void setUserId(long userId){
this.userId = userId;
}
}
Dann rufe ich einfach auf save()
, was an dieser Stelle eigentlich eine Einfügung in die Datenbank ist:
User user1 = new User();
user1.setFirstname("john"); user1.setLastname("dew");
user1.setAge(16);
userService.saveUser(user1);// This call is actually using the JPARepository: userRepository.save(user);
So weit, ist es gut. Jetzt möchte ich diesen Benutzer aktualisieren, beispielsweise sein Alter ändern. Zu diesem Zweck könnte ich eine Abfrage verwenden, entweder QueryDSL oder NamedQuery, was auch immer. Aber wenn ich bedenke, dass ich nur spring-data-jpa und das JPARepository verwenden möchte, wie kann ich dann sagen, dass ich anstelle einer Einfügung ein Update durchführen möchte?
Wie kann ich spring-data-jpa konkret mitteilen, dass Benutzer mit demselben Benutzernamen und Vornamen tatsächlich GLEICH sind und dass die vorhandene Entität aktualisiert werden soll? Das Überschreiben von Gleichen hat dieses Problem nicht gelöst.