ऐसा इसलिए है क्योंकि VARCHAR
. की डिफ़ॉल्ट लंबाई अधिकांश जेपीए प्रदाताओं (हाइबरनेट और एक्लिप्सलिंक सहित) द्वारा बनाए गए डीडीएल स्टेटमेंट में कॉलम 255 हैं। length
निर्दिष्ट करना @Column
. की विशेषता एनोटेशन मूल्य को ओवरराइड करने में मदद करता है, ताकि नया मान जेपीए प्रदाता के स्कीमा जनरेटर द्वारा उठाया जा सके।
यह गलत धारणा है। जेपीए प्रदाता केवल एक बार टेबल बनाएगा, और एप्लिकेशन के जीवनकाल के दौरान अंतर्निहित तालिका की लंबाई को गतिशील रूप से नहीं बदलेगा, और केवल तभी जब आप प्रदाता को तालिका परिभाषाओं को पहले स्थान पर बनाने/अपडेट करने के लिए कॉन्फ़िगर करते हैं। इसके अलावा, String
. की डिफ़ॉल्ट मैपिंग SQL VARCHAR
है टाइप करें।
ऐसा लगता है कि आपने जेपीए प्रदाता को इनिशियलाइज़ेशन प्रक्रिया के दौरान आवश्यकतानुसार (संभवतः उन्हें छोड़ने के बाद) टेबल बनाने के लिए कॉन्फ़िगर किया है। यदि आप हाइबरनेट का उपयोग कर रहे हैं, तो यह hibernate.hbm2ddl.auto
का उपयोग करके किया जाता है persistence.xml
. में निर्दिष्ट संपत्ति update
. के मान के साथ , create
या create-drop
. एक्लिप्सलिंक के साथ, आप संपत्ति निर्दिष्ट करेंगे eclipselink.ddl-generation
create-tables
. के मान के साथ या drop-and-create-tables
।
उपरोक्त दोनों गुणों को उत्पादन में उपयोग के लिए अनुशंसित नहीं किया जाता है पर्यावरण
. टेबल बनाने के लिए डीडीएल स्क्रिप्ट का आदर्श तरीका है। चूंकि, आप VARCHAR
. का उपयोग कर रहे हैं , आपको कॉलम परिभाषा में उपयुक्त लंबाई निर्दिष्ट करनी चाहिए, उपयोगकर्ता इनपुट की अधिकतम लंबाई फिट करने के लिए . इसके अतिरिक्त, चूंकि आप VARCHAR
. का उपयोग कर रहे हैं CHAR
. से अधिक , डेटाबेस इंजन यह सुनिश्चित करेगा कि आवंटित संग्रहण स्थान संग्रहीत किए जा रहे रिकॉर्ड के आकार पर निर्भर करेगा।
यदि आपको डिफ़ॉल्ट VARCHAR
के लिए String की आवश्यकता नहीं है मैपिंग करें और इसके बजाय किसी अन्य मान्य मैपिंग का उपयोग करें, तो आपको columnDefinition
. का उपयोग करना चाहिए @Column
. की विशेषता एनोटेशन। मैपिंग के लिए एक उदाहरण उपयोग Calendar
TIMESTAMPTZ
. पर SQL डेटाटाइप JPA WikiBook
में दिखाया गया है।; आपको अपनी आवश्यकता के अनुसार इसे संशोधित करने की आवश्यकता होगी।