คำถามก็บอกทุกอย่าง การใช้ JPAR ที่เก็บฉันจะอัพเดตเอนทิตีได้อย่างไร
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);
จนถึงตอนนี้ดีมาก ตอนนี้ฉันต้องการอัปเดตผู้ใช้รายนี้บอกว่าเปลี่ยนอายุของเขา เพื่อจุดประสงค์นี้ฉันสามารถใช้ Query ได้ทั้ง QueryDSL หรือ NamedQuery ไม่ว่าจะเป็นอะไรก็ตาม แต่เมื่อพิจารณาว่าฉันต้องการใช้ spring-data-jpa และ JPARepository ฉันจะบอกได้อย่างไรว่าแทนที่จะใช้ตัวแทรกฉันต้องการอัปเดต
โดยเฉพาะฉันจะบอก spring-data-jpa ได้อย่างไรว่าผู้ใช้ที่มีชื่อผู้ใช้และชื่อเดียวกันเป็นจริงเท่ากับและควรจะอัพเดตเอนทิตีที่มีอยู่เดิม การเอาชนะอย่างเท่าเทียมกันไม่ได้แก้ปัญหานี้