spring - वसंत में वास्तव में वसंत कैसे काम करता है। jpa.hibernate.ddl- ऑटो संपत्ति कैसे काम करती है?



database-connection (1)

रिकॉर्ड के लिए, spring.jpa.hibernate.ddl-auto प्रॉपर्टी स्प्रिंग डेटा जेपीए विशिष्ट है और यह एक मूल्य निर्दिष्ट करने का उनका तरीका है जो अंततः हाइबरनेट को उस संपत्ति के तहत पारित किया जाएगा जिसे वह जानता है, hibernate.hbm2ddl.auto

मूल रूप से स्कीमा टूल प्रबंधन, स्टार्टअप पर डेटाबेस स्कीमा में हेरफेर कैसे करेगा, इसके लिए मूल्य create , create-drop create , create-drop , validate और update करते हैं।

उदाहरण के लिए, update ऑपरेशन JDBC ड्राइवर के एपीआई को डेटाबेस मेटाडेटा प्राप्त करने के लिए क्वेरी करेगा और फिर हाइबरनेट आपके एनोटेट कक्षाओं या एचबीएम एक्सएमएल मैपिंग पढ़ने के आधार पर बनाए गए ऑब्जेक्ट मॉडल की तुलना करता है और स्कीमा-ए-फ्लाई को समायोजित करने का प्रयास करेगा।

उदाहरण के लिए update ऑपरेशन नए कॉलम, बाधाओं आदि को जोड़ने का प्रयास करेगा, लेकिन पहले से मौजूद किसी कॉलम या बाधा को कभी नहीं हटाएगा, लेकिन अब एक पूर्व रन से ऑब्जेक्ट मॉडल का हिस्सा नहीं है।

आमतौर पर परीक्षण के मामले में परिदृश्य, आप संभावित रूप से create-drop उपयोग करेंगे ताकि आप अपना स्कीमा बनाएं, आपका परीक्षण मामला कुछ नकली डेटा जोड़ता है, आप अपने परीक्षण चलाते हैं, और फिर परीक्षण के मामले में सफाई के दौरान, स्कीमा ऑब्जेक्ट को छोड़ दिया जाता है, एक प्रमाण पत्र छोड़कर खाली डेटाबेस।

विकास में, डेवलपर्स को पुनरारंभ करने पर नए परिवर्धन को जोड़ने के लिए स्कीमा को स्वचालित रूप से संशोधित करने के लिए update का उपयोग update अक्सर सामान्य होता है। लेकिन फिर से समझते हैं, यह एक स्तंभ या बाधा को नहीं हटाता है जो पिछले निष्पादन से मौजूद हो सकता है जो अब आवश्यक नहीं है।

उत्पादन में, यह अक्सर उच्च अनुशंसा की जाती है कि आप none उपयोग none या बस इस संपत्ति को निर्दिष्ट न करें। ऐसा इसलिए है क्योंकि डीबीए के लिए डेटाबेस परिवर्तनों के लिए माइग्रेशन स्क्रिप्ट की समीक्षा करना आम बात है, खासकर अगर आपका डेटाबेस कई सेवाओं और अनुप्रयोगों में साझा किया जाता है।

मैं अपने स्प्रिंग बूट ऐप प्रोजेक्ट पर काम कर रहा था और देखा कि, कभी-कभी मेरे डेटाबेस में किसी अन्य सर्वर (SQL सर्वर) पर एक कनेक्शन टाइम आउट त्रुटि होती है। यह विशेष रूप से तब होता है जब मैं FlyWay साथ कुछ स्क्रिप्ट माइग्रेशन करने की कोशिश करता FlyWay लेकिन यह कई कोशिशों के बाद काम करता है।

फिर मैंने देखा कि मैंने अपनी प्रॉपर्टीज़ फ़ाइल में spring.jpa.hibernate.ddl-auto निर्दिष्ट नहीं किया है। मैंने कुछ शोध किया और पाया कि spring.jpa.hibernate.ddl-auto= create-drop को जोड़ने की सिफारिश की गई है। spring.jpa.hibernate.ddl-auto= create-drop विकास में spring.jpa.hibernate.ddl-auto= create-drop । और इसे बदल दें: उत्पादन में spring.jpa.hibernate.ddl-auto= none

लेकिन मुझे वास्तव में यह समझ में नहीं आया कि यह वास्तव में कैसे काम करता है और कैसे create-drop या none मूल्य none का उपयोग करके डेटाबेस स्कीमा उत्पन्न करता है। क्या आप तकनीकी रूप से समझा सकते हैं कि यह वास्तव में कैसे काम करता है, और विकास और उत्पादन सर्वर में इस संपत्ति का उपयोग करने के लिए सिफारिशें क्या हैं। धन्यवाद





ddl