हाइबरनेट में पोस्टग्रेस्क्ल के लिए डिफ़ॉल्ट पहचानकर्ता जेनरेटर अनुक्रम जेनरेटर [1] है। i.e. हाइबरनेट SELECT nextval('hibernate_sequence')
सत्र प्रतिबद्धता पर INSERT foo (id, ...) VALUES (123, ...)
करने से पहले एक आईडी उत्पन्न करने के लिए करेगा।PostgreSql "अनुक्रम जेनरेटर" के लिए हाइबरनेट डिफ़ॉल्ट जनरेटर क्यों है, "पहचान जनरेटर" नहीं?
हालांकि, PostgreSql ऑटोइनक्रिएशन आईडी कॉलम का समर्थन करता है (उदाहरण के लिए [2]), और ऑटोइनक्रिकमेंट का समर्थन करने वाले अन्य सभी डेटाबेस के लिए डिफ़ॉल्ट जनरेटर उस सुविधा का उपयोग करना है [3], और आईडी मान को छोड़कर और क्वेरी को सम्मिलित करने के लिए नई आईडी के लिए डेटाबेस (सत्र प्रतिबद्ध होने से पहले, लेकिन सत्र के लेनदेन के भीतर)।
मैंने कुछ हालिया चर्चा देखी है [4] यह बताते हुए कि पूर्व रणनीति सामान्य रूप से बेहतर है, सम्मिलित-सत्र-सत्र-मेल-मिलाप के कारण।
यदि अनुक्रम जेनरेटर बेहतर है ([4] के अनुसार), यह डेटाबेस का डिफ़ॉल्ट क्यों नहीं है जो इसे समर्थन देता है (देखें [3])?
यदि पहचान जनरेटर बेहतर है, तो PostgreSql स्पष्ट रूप से अनुक्रम जेनरेटर क्यों चुनता है जब पोस्टग्रेर्स पूर्व का समर्थन करता है ([2] के अनुसार)?
मैंने पोस्टग्रेस बोली में डिफ़ॉल्ट को ओवरराइड करने के निर्णय का इतिहास खोजने का प्रयास किया (देखें [1]), लेकिन मुझे गिटहब में प्रासंगिक प्रतिबद्धता नहीं मिली। मैंने एसवीएन रिपोजिटरी में वापस कोड का पालन किया है, लेकिन निशान ठंडा हो जाता है जहां postgreSQLDialect फ़ाइल r11563 पर "मैवेन माइग्रेशन" [5] के एक अनुपयोगी प्रतिबद्ध संदेश के साथ जोड़ा जाता है। मैं इतिहास को आगे और पीछे नहीं देख सकता। क्या कोई इस प्रतिबद्धता को जोड़ सकता है जो इस ओवरराइड को जोड़ता है? शायद प्रतिबद्ध संदेश में और जानकारी है।
अग्रिम धन्यवाद।
[4] http://nhforge.org/blogs/nhibernate/archive/2009/03/20/nhibernate-poid-generators-revealed.aspx
मुझे लगता है कि ऐसा इसलिए है क्योंकि 'सीरियल' डेटाटाइप सिर्फ "छिपाने में अनुक्रम" है। –
यह इसकी व्याख्या नहीं करता है - सभी ऑटोइनक्रिकमेंट कॉलम छिपाने में अनुक्रम हैं। – Rich
नहीं, SQL सर्वर या MySQL के लिए नहीं, जहां आप उस प्रविष्टि के बिना अगला मान नहीं प्राप्त कर सकते हैं (जो अनुक्रम आधारित समाधान और "ऑटो-वृद्धि" के बीच बड़ा अंतर है) –