allocationSize
पैरामीटर INCREMENT BY
. से मेल खाना चाहिए अनुक्रम का मूल्य।
यह इस तरह से काम करता है कि हाइबरनेट अनुक्रम (डेटाबेस से) से एक मान प्राप्त करता है, और फिर उस मान को स्मृति में रखता है और अगले एक्स बाद के पहचानकर्ता उत्पन्न करता है (जहां एक्स =आवंटन आकार) इस मान को स्मृति में 1 से बढ़ाता है, बिना डेटाबेस तक पहुंचना।
एक बार हाइबरनेट एक्स पहचानकर्ता उत्पन्न करता है, यह अनुक्रम से अगला मान प्राप्त करता है, और नए एक्स पहचानकर्ता उत्पन्न करता है, उस मान को 1 से बढ़ाता है
एक साधारण उदाहरण - मान लें कि:
@SequenceGenerator( ....allocationSize=5 ...)
CREATE SEQUENCE .... INCREMENT BY 1 ...
उपरोक्त मामले में हाइबरनेट:
- अनुक्रम से पहला नंबर प्राप्त करता है - मान लें
NextVal = 1
और इसे मेमोरी में स्टोर करता है - अगला
allocationSize=5
उत्पन्न करता है पहचानकर्ता उपरोक्त मान को 1 से बढ़ाते हैं, अर्थात:Id = 1, 2, 3, 4, 5
- अनुक्रम से अगला नंबर प्राप्त करता है -
INCREMENT BY 1
के कारण ,nextVal
होगा:2
- अगला
allocationSize=5
उत्पन्न करता है पहचानकर्ता उपरोक्त मान को 1 से बढ़ाते हैं, अर्थात:Id = 2, 3, 4, 5, 6
जैसा कि आप देख सकते हैं, यह एक डुप्लीकेट त्रुटि उत्पन्न करेगा।
अब कृपया इस मामले पर विचार करें:
@SequenceGenerator( ....allocationSize=5 ...)
CREATE SEQUENCE .... INCREMENT BY 5 ...
इस मामले में हाइबरनेट:
- अनुक्रम से पहला नंबर प्राप्त करता है - मान लें
NextVal = 1
और इसे मेमोरी में स्टोर करता है - अगला
allocationSize=5
उत्पन्न करता है पहचानकर्ता उपरोक्त मान को 1 से बढ़ाते हैं, अर्थात:Id = 1, 2, 3, 4, 5
- अनुक्रम से अगला नंबर प्राप्त करता है -
INCREMENT BY 5
के कारण ,nextVal
होगा:6
- अगला
allocationSize=5
उत्पन्न करता है पहचानकर्ता उपरोक्त मान को 1 से बढ़ाते हैं, अर्थात:Id = 6, 7, 8, 9, 10
इस मामले में कोई डुप्लिकेट त्रुटि नहीं है।
आखिरी मामले में यह नुकसान है कि यदि अनुक्रम हाइबरनेट के बाहर उपयोग किया जाता है, तो अनुक्रम अंतराल उत्पन्न करेगा।