मेरे पास स्प्रिंग डेटा जेपीए का उपयोग कर स्प्रिंग बूट 1.3.एम 1 वेब एप्लिकेशन है। आशावादी लॉकिंग के लिए, मैं निम्नलिखित कर रहा हूं:ऑप्टिस्टिक लॉकिंग मैन्युअल रूप से संस्करण फ़ील्ड सेट करते समय अपवाद फेंक नहीं
- इकाई में संस्करण कॉलम एनोटेट करें:
@Version private long version;
। मैंने डेटाबेस तालिका को देखकर पुष्टि की, कि यह क्षेत्र ठीक से बढ़ रहा है। - जब कोई उपयोगकर्ता संपादन के लिए इकाई का अनुरोध करता है, तो
version
फ़ील्ड भी भेजता है। - जब उपयोगकर्ता संपादन के बाद सबमिट करता है,
version
फ़ील्ड को एक छिपे हुए फ़ील्ड या किसी चीज़ के रूप में प्राप्त करना। सर्वर पक्ष, इकाई की ताजा प्रति प्राप्त करना, और फिर
version
फ़ील्ड के साथ वांछित फ़ील्ड को अपडेट करना। इस तरह:User user = userRepository.findOne(id); user.setName(updatedUser.getName()); user.setVersion(updatedUser.getVersion()); userRepository.save(user);
मैं जब संस्करणों से मेल नहीं होता इस अपवाद फेंकने के लिए उम्मीद कर रहा था। लेकिन ऐसा नहीं है। गुगलिंग, मुझे कुछ पोस्ट मिलीं कि हम संलग्न इकाई की @Vesion
संपत्ति सेट नहीं कर सकते हैं, जैसे कि मैं उपरोक्त तीसरे कथन में कर रहा हूं।
तो, मुझे लगता है कि मुझे मैन्युअल रूप से संस्करण मिलान के लिए जांच करनी होगी और अपवाद को फेंकना होगा। क्या यह सही तरीका होगा, या मुझे कुछ याद आ रहा है?
हाइबरनेट * * आप @version क्षेत्र मैन्युअल रूप से संशोधित (विपरीत, कहते हैं, OpenJPA) जाने है, लेकिन इस जेपीए विनिर्देश के साथ लाइन में नहीं है (देखें अनुभाग 11.1.54 http: // stackoverflow.com/questions/30098350/optimisticlockexception-not-thrown-when-version-has-changed-in-spring-boot-proje/30101542#30101542)। यदि आप इकाई को सीधे बाध्यकारी थे तो आपका दृष्टिकोण काम करना चाहिए। क्या आप अपनी सेवा में डीटीओ पास कर रहे हैं और यहां इकाई को पॉप्युलेट कर रहे हैं? –
हां, ऊपर दिए गए मेरे कोड में अद्यतन यूज़र डीटीओ है। – Sanjay