Yah pertanyaannya cukup banyak mengatakan segalanya. Menggunakan JPARepository, bagaimana cara saya memperbarui suatu entitas?
JPARepository hanya memiliki metode penyimpanan , yang tidak memberi tahu saya apakah itu benar-benar membuat atau memperbarui. Sebagai contoh, saya memasukkan Obyek sederhana untuk Pengguna database, yang memiliki tiga bidang: firstname
, lastname
dan 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;
}
}
Maka saya cukup menelepon save()
, yang pada saat ini sebenarnya adalah memasukkan ke dalam basis data:
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);
Sejauh ini baik. Sekarang saya ingin memperbarui pengguna ini, katakan ubah usianya. Untuk tujuan ini saya bisa menggunakan Query, baik QueryDSL atau NamedQuery, apa pun. Tetapi, mengingat saya hanya ingin menggunakan pegas-data-jpa dan JPARepository, bagaimana saya mengatakannya bahwa alih-alih memasukkan saya ingin melakukan pembaruan?
Secara khusus, bagaimana cara memberi tahu pegas-data-jpa bahwa pengguna dengan nama pengguna dan nama depan yang sama sebenarnya EQUAL dan bahwa entitas yang ada seharusnya diperbarui? Override sama dengan tidak menyelesaikan masalah ini.