खैर सवाल बहुत ज्यादा सब कुछ कहते हैं। 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, जो भी हो। लेकिन, यह देखते हुए कि मैं बस स्प्रिंग-डेटा-जेपीए और जेपीएरेपोसिटरी का उपयोग करना चाहता हूं, मैं इसे कैसे बताऊं कि एक इंसर्ट के बजाय मैं एक अपडेट करना चाहता हूं?
विशेष रूप से, मैं स्प्रिंग-डेटा-जेपीए को कैसे बताऊं कि एक ही उपयोगकर्ता नाम और पहले नाम वाले उपयोगकर्ता वास्तव में एक्वल हैं और मौजूदा इकाई को अपडेट किया जाना चाहिए? बराबरी पर रहने से इस समस्या का समाधान नहीं हुआ।