如何使用 spring-data-jpa 更新实体?
好吧,这个问题几乎说明了一切。使用JPARepository如何更新实体?
JPARepository只有一个保存方法,它不会告诉我它是否实际上是在创建或更新。例如,我将一个简单的 Object 插入到数据库 User,它有三个字段:、 和 :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);
目前为止,一切都好。现在我想更新这个用户,比如说改变他的年龄。为此,我可以使用Query,QueryDSL或NamedQuery,等等。但是,考虑到我只想使用spring-data-jpa和JPARepository,我如何告诉它我想要做更新而不是插入?
具体来说,我如何告诉spring-data-jpa具有相同用户名和名字的用户实际上是相等的,并且应该更新现有实体?覆盖相等并不能解决这个问题。