2009-05-07 20 views
5

का उपयोग कर डेटाबेस स्कीमा कैसे बनाएं Hibernate: hbm2ddl.auto=update in production? पढ़ने के बाद कुछ प्रश्न उठ गए। सबसे पहले, मैं हाइबरनेट का उपयोग करने का कारण डेटाबेस विक्रेता स्वतंत्र होना चाहता हूं ("समान" एसक्यूएल क्वेरी, उदाहरण के लिए। Tsql बनाम sql के 10 संस्करणों को लिखने की आवश्यकता नहीं है)।हाइबरनेट

मेरी समस्या तब होती है जब डेटाबेस स्कीमा (उत्पादन वातावरण) बनाने का समय आता है। जहां तक ​​मैं देख सकता हूं कि मेरे पास दो विकल्प हैं।

  1. hbm2dll = अद्यतन
  2. शुद्ध एसक्यूएल (DDL) स्क्रिप्ट।

पहला विकल्प ऊपर दिए गए धागे में व्यापक रूप से चर्चा की जाती है। दूसरा विकल्प खराब है क्योंकि इसका मतलब है कि मैं अपनी पहली समस्या पर वापस आ गया हूं: "एसक्यूएल स्टेटमेंट्स बनाना नहीं चाहते हैं जो डेटाबेस विक्रेता निर्भर हैं"। (यह कथन गलत हो सकता है अगर "सभी" (डेटाबेस को हाइबरनेट समर्थन) DDL (डेटाबेस की संरचना को परिभाषित करने और जांचने के लिए उपयोग किए गए एसक्यूएल का सबसेट) लागू कर रहे हैं।

उत्तर

5

विकास/स्थिति निर्धारण मोड और हस्तांतरण में सभी परिवर्तनों करो और मैन्युअल रूप से उत्पादन में आलेख निष्पादित (या स्वचालित रूप से है, लेकिन जाने हाइबरनेट उन्हें चलाने नहीं है)। स्क्रिप्ट को कुछ आश्चर्यजनक की आवश्यकता हो सकती है क्योंकि hbm2ddl अद्यतन सभी मामलों को कवर नहीं करता है।

असल में मैंने किसी भी डेटाबेस के खिलाफ हाइडनेट रन डीडीएल को कभी भी नहीं जाने दिया। मैं hbm2ddl पाठ उत्पन्न करने के लिए उपयोग करें:

org.hibernate.tool.hbm2ddl.SchemaExport --config=hibernate.cfg.xml --text --format --delimiter=; 

org.hibernate.tool.hbm2ddl.SchemaUpdate --config=hibernate.cfg.xml --text --format --delimiter=; 
+0

मुझे पंच पर मारो। पूरी तरह से सहमत –

1

मैं हाइबरनेट (एक बहुत) पसंद है, और मुझे लगता है कि यह कुछ अविश्वसनीय रूप से अच्छी गुणवत्ता कोड बनाता है, लेकिन मैं जैसे ही यह ढीला चालू करेंगे एक उत्पादन डेटाबेस पर की तुलना में मैं जाने चाहते हैं एक बहुत अच्छी तरह से मज़ेदार grizzly भालू babysit। कुछ समय के लिए सबकुछ बढ़िया हो सकता है, लेकिन एक घटना जहां यह खराब हो जाती है वास्तव में खराब है।

मेरा सुझाव परीक्षण वातावरण में होगा, हाइबरनेट डेटाबेस स्कीमा उत्पन्न करेगा। परीक्षण वातावरण में उनको परीक्षण करें। फिर उन स्क्रिप्ट को उत्पादन वातावरण में ले जाएं और उन्हें चलाएं। वहां विशिष्टता पर ध्यान दें; भले ही परीक्षण fantastically सफल हो, मैं अभी भी Hibernate उत्पादन सर्वर पर जंगली जाने की अनुमति नहीं होगी। हाइबरनेट स्कीमगेन का आउटपुट लें, इसका परीक्षण करें, और एक बार यह सत्यापित हो जाने के बाद, उसे उत्पादन सर्वर पर तैनात करें।

+1

यहां प्रतिकूल होने की कोशिश नहीं कर रहा है, लेकिन क्या आपने मेरा प्रश्न पढ़ा? – Schildmeijer

+0

मैंने किया; क्या कोई विशिष्ट तरीका है जिसमें मेरा उत्तर आपके प्रश्न की गलत समझ को इंगित करता है? –

+0

आपके उत्तर में पहली वाक्य। – Schildmeijer

3

आम तौर पर जेपीए स्कीमा डंप करने वाले उपकरण SchemaExport उपकरण पर आधारित होते हैं, जो केवल स्थिर मेटाडेटा पढ़ता है।

एक मेवेन/ग्रैडल प्लगइन https://github.com/Devskiller/jpa2ddl है जो जेपीए स्कीमा उत्पन्न करता है। इसमें सभी गुण, नामांकन रणनीतियों, उपयोगकर्ता प्रकार, आदि शामिल हैं

आप Flyway के लिए स्वचालित स्कीमा माइग्रेशन जेनरेट करने के लिए इसका उपयोग भी कर सकते हैं।