まあ、質問はほとんどすべてを言っています。JPARepository を使用してエンティティを更新するにはどうすればよいですか?
JPARepository にはsaveメソッドしかなく、実際に create なのか update なのかわかりません。たとえば、次の 3 つのフィールドを持つ単純なオブジェクトをデータベース 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);
ここまでは順調ですね。ここで、このユーザーを更新したいと思います。たとえば、年齢を変更します。この目的のために、QueryDSL や NamedQuery などのクエリを使用できます。しかし、単に spring-data-jpa と JPARepository を使用したいだけであることを考えると、挿入の代わりに更新を行いたいことをどのように伝えればよいでしょうか?
具体的には、同じユーザー名とファーストネームを持つユーザーが実際には EQUAL であり、既存のエンティティが更新されるはずであることを spring-data-jpa に伝えるにはどうすればよいですか? equals をオーバーライドしても、この問題は解決しませんでした。