Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

javax.persistence.EntityExistsException सीक्वेंस जेनरेटर के साथ

allocationSize पैरामीटर INCREMENT BY . से मेल खाना चाहिए अनुक्रम का मूल्य।

यह इस तरह से काम करता है कि हाइबरनेट अनुक्रम (डेटाबेस से) से एक मान प्राप्त करता है, और फिर उस मान को स्मृति में रखता है और अगले एक्स बाद के पहचानकर्ता उत्पन्न करता है (जहां एक्स =आवंटन आकार) इस मान को स्मृति में 1 से बढ़ाता है, बिना डेटाबेस तक पहुंचना।

एक बार हाइबरनेट एक्स पहचानकर्ता उत्पन्न करता है, यह अनुक्रम से अगला मान प्राप्त करता है, और नए एक्स पहचानकर्ता उत्पन्न करता है, उस मान को 1 से बढ़ाता है

एक साधारण उदाहरण - मान लें कि:

  • @SequenceGenerator( ....allocationSize=5 ...)
  • CREATE SEQUENCE .... INCREMENT BY 1 ...

उपरोक्त मामले में हाइबरनेट:

  1. अनुक्रम से पहला नंबर प्राप्त करता है - मान लें NextVal = 1 और इसे मेमोरी में स्टोर करता है
  2. अगला allocationSize=5 उत्पन्न करता है पहचानकर्ता उपरोक्त मान को 1 से बढ़ाते हैं, अर्थात:Id = 1, 2, 3, 4, 5
  3. अनुक्रम से अगला नंबर प्राप्त करता है - INCREMENT BY 1 के कारण , nextVal होगा:2
  4. अगला allocationSize=5 उत्पन्न करता है पहचानकर्ता उपरोक्त मान को 1 से बढ़ाते हैं, अर्थात:Id = 2, 3, 4, 5, 6

जैसा कि आप देख सकते हैं, यह एक डुप्लीकेट त्रुटि उत्पन्न करेगा।

अब कृपया इस मामले पर विचार करें:

  • @SequenceGenerator( ....allocationSize=5 ...)
  • CREATE SEQUENCE .... INCREMENT BY 5 ...

इस मामले में हाइबरनेट:

  1. अनुक्रम से पहला नंबर प्राप्त करता है - मान लें NextVal = 1 और इसे मेमोरी में स्टोर करता है
  2. अगला allocationSize=5 उत्पन्न करता है पहचानकर्ता उपरोक्त मान को 1 से बढ़ाते हैं, अर्थात:Id = 1, 2, 3, 4, 5
  3. अनुक्रम से अगला नंबर प्राप्त करता है - INCREMENT BY 5 के कारण , nextVal होगा:6
  4. अगला allocationSize=5 उत्पन्न करता है पहचानकर्ता उपरोक्त मान को 1 से बढ़ाते हैं, अर्थात:Id = 6, 7, 8, 9, 10

इस मामले में कोई डुप्लिकेट त्रुटि नहीं है।

आखिरी मामले में यह नुकसान है कि यदि अनुक्रम हाइबरनेट के बाहर उपयोग किया जाता है, तो अनुक्रम अंतराल उत्पन्न करेगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. दो कॉलम में अधिकतम मान वाले रिकॉर्ड का चयन कैसे करें?

  2. Oracle SQL डेवलपर में ट्रिगर को अक्षम कैसे करें?

  3. Linux पर Oracle 10g xe को पुन:कॉन्फ़िगर कैसे करें

  4. SQL सम्मिलित क्वेरी प्रदर्शन में सुधार कैसे करें?

  5. ओरेकल राउंडिंग डाउन