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

MySQL पर @GeneratedValue बहुरूपी सार सुपरक्लास

क्या गड़बड़ है... AUTO_INCREMENT MySQL का हिडन सीक्वेंस है। मूल समस्या यह है कि MySQL एक ही समय में पीके को सम्मिलित और वापस नहीं कर सकता है, लेकिन हाइबरनेट को इसकी आवश्यकता है जबकि INSERT एक नई इकाई में।

जिन समस्याओं का आप सामना करते हैं:

  1. यदि हाइबरनेट एक नई इकाई को सहेजता है, तो वह आईडी को नए EntityBean पर तुरंत सेट करने का प्रयास करता है। इसलिए हाइबरनेट को यह पढ़ना चाहिए कि हाइबरनेट तालिका में नए टुपल को सहेजने से पहले डेटाबेस किस आईडी का उपयोग करेगा।
  2. यदि आपके पास डेटाबेस तक पहुंचने वाले एकाधिक सर्वर हैं, तो आप हाइबरनेट के सत्र-फ़ैक्टरी को अंतर्निहित अनुक्रम (ऑटो-इन्क्रीमेंट) का उपयोग करने का निर्णय लेने देंगे या हाइबरनेट को निर्णय लेने देंगे (GenerationType.AUTO /GenerationType.IDENTITY ) आरक्षित पीके की खुली सीमा कितनी बड़ी है (एक डीबी-वास्तुकार की नौकरी)। (हमारे पास एक डेटाबेस में लगभग 20 सर्वर हैं, इसलिए एक अच्छी उपयोग की गई तालिका पर हम +100 की पीके-दूरी का उपयोग करते हैं)। यदि केवल एक सर्वर के पास डेटाबेस तक पहुंच है GenerationType.TABLE सही होगा।

हाइबरनेट को max(*)+1 . का उपयोग करके अगली आईडी की गणना स्वयं करनी होगी लेकिन:

  • क्या होगा यदि दो अनुरोध max(*)+1 मांगते हैं उसी समय/उसी परिणाम के साथ? दाएं:insert का अंतिम प्रयास असफल हो जायेगी।

तो आपके पास एक टेबल होना चाहिए LAST_IDS डेटाबेस में जो अंतिम टेबल-पीके को स्टोर करता है। यदि आप एक जोड़ना चाहते हैं, तो आपको यह चरण अवश्य करने चाहिए:

  1. पढ़ने के लिए आशावादी लेन-देन शुरू करें।
  2. LAST_IDS से MAX(address_id) चुनें
  3. अधिकतम को जावा-वेरिएबल यानी $OldID में संग्रहित करें।
  4. $NewID =$OldID + 1. (+100 निराशावादी-ताला में)
  5. अपडेट LAST_IDS SET address_id=$newID जहां address_id=$oldID ?
  6. पढ़ने के लिए आशावादी लेनदेन करें।
  7. यदि प्रतिबद्ध सफल रहा, तो $newID स्टोर करें करने के लिए setID() हाइबरनेटबीन में आप सहेजना पसंद करते हैं।
  8. अंत में हाइबरनेट को इन्सर्ट को कॉल करने दें।

मुझे पता है कि यही एकमात्र तरीका है।

BTW:हाइबरनेट-इकाइयाँ केवल इनहेरिटेंस का उपयोग करेंगी यदि डेटाबेस PostgreSQL जैसी तालिकाओं के बीच इनहेरिटेंस का समर्थन करता है या Oracle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL 8.0 में रूट उपयोगकर्ता को सभी विशेषाधिकार कैसे प्रदान करें

  2. MySQL शेल का उपयोग करके तार्किक डेटाबेस बैकअप

  3. MONTHNAME () उदाहरण – MySQL

  4. MySQLDumper:एक PHP और पर्ल आधारित MySQL डेटाबेस बैकअप टूल

  5. MySQL में JSON कॉलम को कैसे क्वेरी करें