Ну, питання майже все говорить. Використовуючи JPARepository, як оновити сутність?
JPARepository має лише метод збереження , який не підказує мені, чи він створений чи оновлений насправді. Наприклад, вставити простий об'єкт в базі даних користувача, який має три поля: firstname
, lastname
а 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;
}
}
Тоді я просто дзвоню save()
, що на даний момент є фактично вставкою в базу даних:
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);
Все йде нормально. Тепер я хочу оновити цього користувача, скажімо, змінити його вік. Для цього я міг би використовувати Запит, або QueryDSL, або NamedQuery, будь-який. Але, враховуючи, що я просто хочу використовувати spring-data-jpa та JPARepository, як я можу сказати, що замість вставки я хочу зробити оновлення?
Зокрема, як я можу сказати spring-data-jpa, що користувачі з тим самим іменем та іменем насправді є EQUAL і що існуюча сутність повинна бути оновлена? Перевищення рівних не вирішило цю проблему.