2012-05-18 12 views
14

मैं वसंत-डेटा के साथ एक विश्वसनीय वेबसाइकिल पर काम कर रहा हूं। कुछ दिन पहले एक विशेष वसंत-डेटा जेपीए आरईएसटी फ्रेमवर्क was releasedवसंत-डेटा प्रोजेक्ट में @Version का उपयोग

अब मैंने इस ढांचे के साथ @ वर्जन का उपयोग करने की क्षमता देखी है। क्या यह संस्करण स्वयं ही उत्पन्न हुआ है या आपको इसे मैन्युअल रूप से करने की आवश्यकता है?

और क्या यह @Version का उपयोग करना संभव है? (इसलिए मुझे अपने मौजूदा भंडार/डोमेन आदि में कुछ भी बदलने की ज़रूरत नहीं है ..)

और क्या मुझे @Version का उपयोग करने के लिए कुछ अतिरिक्त कॉन्फ़िगरेशन करने की आवश्यकता है?

उत्तर

34

यह कुछ समय हो गया है क्योंकि मैंने यह प्रश्न पोस्ट किया है लेकिन मैंने इसे समझ लिया है। मैं समझाऊंगा कि मैंने क्या किया ताकि यह किसी और के लिए सहायक हो।

एनोटेशन @Version एक javax.persistence इंटरफ़ेस है और वसंत-डेटा आराम जेपीए फ्रेमवर्क जैसा कि मैंने पहले उल्लेख किया था। आप यह स्वचालित रूप से पिक हाइबरनेट एनोटेशन होगा उपयोग कर रहे हैं

@Version 
@Column(name = "VERSION") 
private long version; 

और यह पैदा करेगा:

आप @version का उपयोग करना चाहते हैं तो आप इतना की तरह अपने डोमेन वस्तु में एक संस्करण क्षेत्र बनाने की जरूरत आपके (My caseql) तालिका में एक "संस्करण" पंक्ति। जब भी एक रिकॉर्ड अपडेट हो जाता है, हाइबरनेट काउंटर को बढ़ाएगा 1.

अब यह कुछ क्यों है? वैसे कारण आप इसका उपयोग क्यों कर सकते हैं क्योंकि यह आपके ग्राहकों को stale data के साथ काम करने का मौका कम करता है। जब भी कोई ग्राहक आपके द्वारा सूचना प्राप्त करता है तो वह संस्करण उसके द्वारा अनुरोध किए गए डेटा के साथ प्रदान किया जाता है। जैसे

{      <-- School entity --> 
    "id": 1, 
    "version": 0,     
    "name": "De regenboog", 
    "street": "Plantaanstraat", 
    "number": "2", 
    "zipCode": "1234AS", 
    "city": "Amsterdam" 
} 

अब अगर एक ग्राहक इस विशिष्ट रिकॉर्ड के बारे में कुछ जानकारी को बदलना चाहता है यह संस्करण मूल्य के साथ-साथ नई जानकारी भेजता है। इस मामले में चलो स्कूल का नाम बदल दें।

{      <-- School entity --> 
    "id": 1, 
    "version": 0,     
    "name": "Stackoverflow", 
    "street": "Plantaanstraat", 
    "number": "2", 
    "zipCode": "1234AS", 
    "city": "Amsterdam" 
} 

हाइबरनेट आपकी जानकारी के साथ एक प्रश्न के साथ आता है और संस्करण को देखने के लिए अतिरिक्त 'कहां' खंड जोड़ता है। update .... where id = 1 and version = 0। अब यदि पंक्ति अपडेट की गई है तो इसका मतलब है कि आपने सही संस्करण प्रदान किया है और किसी और ने उस जानकारी के बीच उस विशिष्ट जानकारी को बदल दिया है जब आपने जानकारी का अनुरोध किया था, इसे बदल दिया और इसे वापस भेज दिया। अच्छा है ना?

अब क्या होगा यदि पंक्ति अपडेट नहीं की गई है? इसका मतलब है कि किसी और ने उस पंक्ति को अपडेट किया है जब आप जानकारी का अनुरोध करने के बाद त्वरित बाथरूम ब्रेक ले रहे थे। इसका मतलब है कि आपका संस्करण पुराना है! अब क्या होने की ज़रूरत है वास्तव में केस विशिष्ट का उपयोग करें, इसलिए मैं इसके बारे में विवरण में नहीं जाऊंगा :)

आशा है कि कोई इस जानकारी का उपयोग कर सकता है!

धन्यवाद सभी

+0

यह समझ में आता है। यह निश्चित रूप से मेरी मदद करता है। धन्यवाद – kalz

1

आयात करने के लिए आयात javax.persistence.Version

और नहीं वसंत एक सुनिश्चित करें।

+0

मैंने पहले ही यह जवाब दिया है: "एनोटेशन @ वीर्सन एक जावैक्स है। प्रेरणा इंटरफ़ेस और वसंत-डेटा आराम जेपीए फ्रेमवर्क जैसा कि मैंने पहले उल्लेख किया था।" –

+1

नोट कारण के लिए महत्वपूर्ण है।स्प्रिंग @ वर्जन एनोटेशन जेपीए के अलावा सब कुछ के लिए है। Http://stackoverflow.com/a/31883006/328808 देखें। –

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