2010-04-23 13 views
10

मान्य करें मुझे दिलचस्पी है कि कैसे hibernate.hbm2ddl.auto = मान्य वास्तव में काम करता है और मैं व्यापक दस्तावेज़ीकरण खोजने के लिए संघर्ष कर रहा हूं।हाइबरनेट - hibernate.hbm2ddl.auto =

हमने हाल ही में पाया है कि उत्पादन प्रणाली http://opensource.atlassian.com/projects/hibernate/browse/HHH-3532 द्वारा प्रभावित हुई थी (हस्ताक्षर के बजाय हाइबरनेट नाम पर विदेशी कुंजी से मेल खाता है और इसलिए उन्हें आपके लिए फिर से बना देगा) और hibernate.hbm2ddl.auto = अपडेट को हमारी अगली रिलीज से हटा दिया जा रहा है।

मुझे पूरी तरह से hibernate.hbm2ddl.auto से छुटकारा पाने और हमारे डेटाबेस को प्रबंधित करने में काफी खुशी होगी। हालांकि, मेरे सभी सहयोगी इस दुनिया के दृश्य को साझा नहीं करते हैं और कुछ hibernate.hbm2ddl.auto = मान्य में वापस जोड़ने के इच्छुक हैं।

मुझे चिंता है कि यह एक ही समस्या को प्रभावित करेगा और मुझे यह प्रमाणीकरण वास्तव में कैसे काम करता है इसके बारे में अधिक दस्तावेज खोजने में दिलचस्पी है। हाइबरनेट समुदाय दस्तावेज़ीकरण (http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html) वास्तव में केवल मानों का संदर्भ देता है।

क्या किसी के पास उत्पादन प्रणाली में वैध उपयोग करने का कोई अच्छा दस्तावेज पॉइंटर्स या वास्तविक जीवन अनुभव है?

उत्तर

17

मुझे चिंता है कि यह एक ही समस्या को प्रभावित करेगा और मुझे यह सत्यापन वास्तव में कैसे काम करता है इसके बारे में अधिक दस्तावेज़ीकरण में दिलचस्पी है।

मेरी राय में, सबसे अच्छा दस्तावेज स्रोत कोड है जिसे आप वास्तव में क्या हो रहा है यह देखने के लिए जांच सकते हैं। प्रासंगिक विधि org.hibernate.tool.hbm2ddl.SchemaValidator#validate() है।

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

अब, HHH-3532 चिह्नित किया जा रहा तय रूप में, तुम क्यों हाइबरनेट के एक नए संस्करण में नवीनीकृत नहीं है या, यदि हाइबरनेट के संस्करण को बदलने के बहुत भारी है, तुम क्यों पैच HHH-3532 खुद के लिए लागू नहीं है?

यह सब होने के बाद, I उत्पादन डेटाबेस अपडेट करने के लिए hibernate.hbm2ddl.auto=update का उपयोग न करें, मैं परिवर्तन स्क्रिप्ट का उपयोग करता हूं। लेकिन Ihibernate.hbm2ddl.auto=validate का उपयोग करें और मैं इसके साथ खुश हूं।

+0

धन्यवाद पास्कल। मैं उत्पादन प्रणालियों का प्रभारी नहीं हूं और, टीबीएच, मुझे विश्वास नहीं है कि संस्करणों को बदलने के बारे में मुझे खुश करने के लिए लगभग पर्याप्त प्रतिगमन परीक्षण होगा! परिवर्तन नियंत्रण इतिहास के माध्यम से देखकर दूसरे दिन मैंने देखा कि यह मूल रूप से मान्य के रूप में सेट किया गया था और किसी ने इसे 'udpate' में अपडेट किया था। यह देखते हुए, मुझे लगता है कि इसे हटाने के लिए सुरक्षित है - उम्मीद है कि भविष्य में किसी मूल्य को ट्विक करने की तुलना में किसी को पूरी लाइन में जोड़ने की संभावना कम है! – azp74