आप "गाइड" जनरेटर का उपयोग करने में सक्षम हो सकते हैं। इस पोस्ट को हाइबरनेट फोरम से देखें। ऐसा लगता है कि उन्होंने SYS_GUID()
. का उपयोग करके Oracle के लिए समर्थन जोड़ा है कुछ समय पहले, लेकिन दस्तावेज़ीकरण अभी भी कहता है कि वे केवल SQL सर्वर और MySQL का समर्थन करते हैं।
मैंने अभी तक जेपीए एनोटेशन के साथ काम नहीं किया है, लेकिन यहां एक्सएमएल कॉन्फ़िगरेशन का उपयोग करके एक उदाहरण दिया गया है:
<id name="PRODUCT_ID">
<generator class="guid" />
</id>
संपादित करें: आपके दूसरे प्रश्न के संबंध में, मुझे लगता है कि आप पूछ रहे हैं कि हाइबरनेट ऐसा कुछ क्यों नहीं कर सकता:
INSERT INTO PRODUCT (PRODUCT_ID, /* etc */)
SELECT SYSGUID(), /* etc */
कारण यह है कि हाइबरनेट को पता होना चाहिए कि वस्तु की आईडी क्या है। उदाहरण के लिए, निम्नलिखित परिदृश्य पर विचार करें:
- आप एक नई उत्पाद वस्तु बनाते हैं और उसे सहेजते हैं। Oracle आईडी असाइन करता है।
- आप उत्पाद को हाइबरनेट सत्र से अलग करते हैं।
- आप बाद में इसे फिर से संलग्न करते हैं और कुछ परिवर्तन करते हैं।
- अब आप उन परिवर्तनों को जारी रखना चाहते हैं।
आईडी जाने बिना, हाइबरनेट ऐसा नहीं कर सकता। अद्यतन विवरण जारी करने के लिए इसे आईडी की आवश्यकता है। तो org.hibernate.id.GUIDGenerator
. का कार्यान्वयन पहले आईडी जनरेट करनी होती है, और फिर बाद में इसे INSERT स्टेटमेंट में फिर से इस्तेमाल करना होता है।
यही कारण है कि हाइबरनेट कोई बैचिंग नहीं कर सकता है यदि आप डेटाबेस-जनरेटेड आईडी (इसका समर्थन करने वाले डेटाबेस पर ऑटो-इन्क्रीमेंट सहित) का उपयोग करते हैं। हिलो जेनरेटर में से किसी एक का उपयोग करना, या कुछ अन्य हाइबरनेट-जेनरेटेड आईडी तंत्र का उपयोग करना, एक ही बार में बहुत सारी वस्तुओं को सम्मिलित करते समय अच्छा प्रदर्शन प्राप्त करने का एकमात्र तरीका है।