2008-09-18 12 views
11

यह संभव हाइबरनेट में एक आईडी के लिए @GeneratedValue बायपास करने के लिए है, हम एक मामले में जहां, समय के सबसे अधिक हम चाहते हैं GeneratedValue का उपयोग कर आईडी सेट करने की आवश्यकता है, लेकिन कुछ मामलों में मैन्युअल आईडी सेट करना चाहते हैं ।बाईपास GeneratedValue हाइबरनेट में

ऐसा करना संभव है?

उत्तर

5

मुझे पता है कि आप इसे जेपीए स्पेक में कर सकते हैं, इसलिए आपको हाइबरनेट (जेपीए + एनोटेशन का उपयोग करके) में सक्षम होना चाहिए।

यदि आप केवल नए लगातार मॉडल के आईडी फ़ील्ड को भरते हैं, तो जब आप उस मॉडल को EntityManager में "मर्ज" करते हैं, तो यह आपके द्वारा सेट की गई आईडी का उपयोग करेगा।

यह असर है, हालांकि है। आप सिर्फ इतना है कि आईडी का इस्तेमाल किया गया है, लेकिन अनुक्रम GeneratedValue एनोटेशन द्वारा निर्दिष्ट है कि पता नहीं है। जब तक आप एक ununsed आईडी वर्तमान अनुक्रम मूल्य से कम है कि निर्दिष्ट कर रहे हैं, आप एक बार अनुक्रम मूल्य तुम सिर्फ इस्तेमाल किया अप करने के लिए फैल जाती है एक समस्या पाने के लिए जा रहे हैं।

तो, शायद मैं देख सकता हूं कि आप उपयोगकर्ता को आईडी निर्दिष्ट करने में सक्षम होना चाहते हैं, लेकिन फिर आपको संभावित अपवाद (डुप्लिकेट आईडी) को भविष्य में आने की आवश्यकता है।

+0

मेरे मामले में, वहाँ है, कोई डुप्लिकेट हो के रूप में आईडी सिर्फ लेन-देन में विभिन्न बिंदुओं पर, दोनों ही मामलों में उसी क्रम से उत्पन्न किया जा जाएगा। –

+1

मुझे इसके बारे में कोई संदेह है, http://stackoverflow.com/questions/3194721/bypass-generatedvalue-in-hibernate-merge-data-not-in-db और http://stackoverflow.com/questions जैसे प्रश्न देखें/2108178/आईडी-generatedvalue बल्कि सेट खुद-आईडी-मूल्य। –

+2

मुझे नहीं लगता कि यह या तो सही है। यह निश्चित रूप से हाइबरनेट में काम नहीं करता और मैं भी शक नहीं है कि यह सबसे जेपीए प्रदाताओं के साथ काम करेंगे है। – cyberoblivion

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