Cóż, pytanie w zasadzie mówi wszystko. Korzystanie z JPARepository jak zaktualizować encję?
JPARepository ma tylko metodę zapisywania , która nie mówi mi, czy faktycznie jest tworzona czy aktualizowana. Na przykład wstawić prosty obiekt do użytkownika bazy danych, który ma trzy pola: firstname
, lastname
i 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;
}
}
Następnie po prostu wywołuję save()
, która w tym momencie jest właściwie wstawką do bazy danych:
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);
Na razie w porządku. Teraz chcę zaktualizować tego użytkownika, powiedzmy zmień jego wiek. W tym celu mógłbym użyć Query, QueryDSL lub NamedQuery, cokolwiek. Ale biorąc pod uwagę, że chcę po prostu użyć spring-data-jpa i JPARepository, jak mam to powiedzieć, że zamiast wstawki chcę wykonać aktualizację?
W szczególności, jak mam powiedzieć spring-data-jpa, że użytkownicy z tą samą nazwą użytkownika i imieniem są w rzeczywistości RÓWNI i że istniejący byt powinien zostać zaktualizowany? Zastąpienie równości nie rozwiązało tego problemu.