2015-02-10 6 views
5

अद्यतन करें spring-data-jpa repository.save केवल update करें लेकिन प्राथमिक कुंजी नहीं मिलने पर नया निर्माण न करें।
वर्तमान में, repository.save() मेरी डेटाबेस में एक अब रिकॉर्ड बनाएगा अगर नहीं मिलाकैसे वसंत डेटा jpa repository.save केवल

उत्तर

12

Repository.save()सम्मिलित रूप में अच्छी तरह के रूप में अद्यतन के लिए एक दोहरी purposed विधि है

दो द्वारा इस्तेमाल किया तंत्र रहे हैं वसंत तय करने के लिए अगर यह एक इकाई पर सम्मिलित या अद्यतन का उपयोग करना चाहिए:

  1. डिफ़ॉल्ट रूप से, स्प्रिंग इकाई आईडी-प्रॉपर्टी (@Id) इकाई का निरीक्षण करती है, यह पता लगाने के लिए कि इकाई नई है या नहीं। यदि पहचानकर्ता संपत्ति शून्य है, तो इकाई को नया माना जाता है, अन्यथा नया नहीं।
  2. इसका बेहतर नियंत्रण लेने का एक और तरीका Persistable लागू करना है। Persistable को लागू करने वाली इकाइयों के लिए, वसंत isNew(…) विधि को यह पता लगाने के लिए कॉल करेगा कि यह या अपडेट किया गया है।
+1

क्या आप मुझे बता सकते हैं कि इसे कैसे कार्यान्वित किया जाए? – Awakening

+0

आप क्या लागू करने के लिए देख रहे हैं? 'save()' ऑपरेशन स्प्रिंग डेटा जेपीए ढांचे द्वारा कार्यान्वित किया जाता है। –

+0

मेरा मतलब है कि 'सेव' ऑपरेशन केवल अपडेट करें, लेकिन – Awakening

1

@ManishMheshwari का मतलब Repository.findeOne (Id) था। मैं इस मामले में हम पथ से मौजूदा ईद मूल्य मिल रहा है और .findOne में इसे पारित कर रहे हैं()

@RequestMapping(value = "/recipes/{id}/edit", method = RequestMethod.POST) 
    public String saveEditedRecipe(@PathVariable("id") Long id){ 
    Recipe recipe = recipes.findOne(id); 

    //do anything you want 

    recipes.save(recipe); 

    return "redirect:/recipes/" + recipe.getId(); 
    } 

: यहाँ एक नियंत्रक का एक उदाहरण है। इस तरह हम सही आईडी के साथ नुस्खा प्राप्त कर रहे हैं जिसे हम अपडेट करना चाहते हैं। फिर आप अतिरिक्त तर्क या बस .save() कर सकते हैं। इस दृष्टिकोण का उपयोग करके यह उस आईडी के साथ इकाई को अपडेट करेगा जिसे आपने निश्चित रूप से पारित किया था।

संबंधित मुद्दे