2009-08-02 20 views
6

जब मैं अपने हाइबरनेट उपकरण चलाता हूं तो यह डीबी से पढ़ता है और प्रत्येक टेबल, और संयुक्त प्राथमिक कुंजी के लिए जावा क्लास के लिए जावा क्लास बनाते हैं। यह बढ़िया है।"कैटलॉग" विशेषता के बिना हाइबरनेट टूल एनोटेशन पीढ़ी चलाना

समस्या इस लाइन

@Table(name="tst_feature" 
    ,catalog="tstdb" 
) 

जबकि तालिका नाम की आवश्यकता है, "सूची" विशेषता की आवश्यकता नहीं है है। कभी कभी मैं "tstdb" उपयोग करना चाहते हैं, कभी कभी मैं "tstdev"

मैंने सोचा जो डाटाबेस में चुना गया था JDBC कनेक्शन यूआरएल पर निर्भर करता है, लेकिन जब मैं JDBC यूआरएल बदलने के लिए "tstdev" बात करने के लिए उपयोग करना चाहते हैं, यह अभी भी "tstdb" उपयोग कर रहा है

हां, तो मुझे पता है क्या किया जाना चाहिए, बस नहीं जानता कि इसका कैसे किया जाता है मेरे विकल्प

  • रहे हैं "सूची" विशेषता की पीढ़ी को दबाने वर्तमान में मैं इसे मैन्युअल रूप से कर रहा हूं (नहीं बहुत ही उत्पादक) या मैं एक प्रोग्राम है जो जावा फ़ाइल को पार्स करता है लिख सकते हैं और मैन्युअल विशेषता को हटाने, लेकिन मैं मैं

या

  • की जरूरत नहीं है आशा करती हूं कि हो सकता है एक तरह से बताने के लिए लगता है "कैटलॉग" विशेषता को अनदेखा करने के लिए हाइबरनेट करें और स्पष्ट रूप से निर्दिष्ट स्कीमा का उपयोग करें। मुझे पता नहीं है कि मुझे सटीक सेटिंग को बदलने के लिए इसे बदलना है, या यहां तक ​​कि यदि विकल्प उपलब्ध है।

उत्तर

7

आप 3 चरणों का पालन करने की जरूरत है -)

2) ऊपर पोस्ट में विनिर्दिष्ट hibernate.reveng.xml में

1) hibernate.cfg.xml में, इस संपत्ति

hibernate.default_catalog = MyDatabaseName 

जोड़ने (, सभी को जोड़ने तालिका

table-filter match-name="MyTableName" 

(जैसे बस) इस, कोई सूची नाम यहाँ)

3) हाइबरनेट कोड

आप *.hbm.xml फ़ाइलों में से किसी में किसी भी सूची नाम नहीं दिखाई देगा से जेनरेट करें।

मैंने एक्लिप्स गैलीलियो और हाइबरनेट -3.2.4.जीए का उपयोग किया है।

1

पीढ़ी के लिए एक अनुकूलन है, जो बताएगा कि कौन सी सूची में कैटलॉग डालना है।

आप मैन्युअल रूप से कैटलॉग निर्दिष्ट कर सकते हैं (reveng फ़ाइल, <table> तत्व में), या प्रोग्रामेटिक रूप से (यदि मुझे अच्छी तरह याद है तो आपकी कस्टम रिवर्सइंजिनरिंग स्ट्रेटी क्लास में)।

इसके अलावा, मुझे हाल ही में पीढ़ी के टेम्पलेट्स को संशोधित करना पड़ा। टेम्पलेट्स अनुकूलित करने के लिए

क्षमा करें, यह अधिक सटीक हो सकता है, लेकिन मेरे पास अभी मेरे काम कंप्यूटर तक पहुंच नहीं है।

+0

तालिका तत्व कैटलॉग, हाँ से तालिकाओं का चयन करता है। लेकिन यह मैं नहीं चाहता हूं। मैं चाहता इकाई "सूची" विशेषता के बिना उत्पन्न करने यदि सूची विशेषता नहीं है, कोई बात नहीं क्या मेरी JDBC यूआरएल है, यह अभी भी एक ही स्कीमा को इंगित होता है, मैं स्विच करने में सक्षम होना चाहता हूँ इकाइयों को फिर से उत्पन्न किए बिना स्कीमा। –

+0

मैं FTL फ़ाइलों पर एक दृष्टि डाली दर्शाने वाली पंक्ति है <#if clazz.table.catalog? मौजूद है> , सूची = "$ {clazz.table.catalog}" कैसे करना है पर कोई विचार मैंने इसे झूठा करने के लिए सेट किया? –

+1

मैंने इसे <संपत्ति का नाम = "डिफ़ॉल्ट_catalog"> xxx में hibernate.cfg.xml फ़ाइल का उपयोग किया –

0

विशेषता सूची एक "कनेक्शन" विशेषता है और इसे "कनेक्शन" कॉन्फ़िगरेशन फ़ाइल hibernate.cfg.xml में निर्दिष्ट किया जाना चाहिए और "डेटा" कॉन्फ़िगरेशन फ़ाइल *.hbm.xml में नहीं होना चाहिए।

मैं चींटी कार्य <hibernatetool> के माध्यम से हाइबरनेट कोड उत्पन्न करता हूं और मैंने इसे पुनर्जन्म के बाद कार्य को प्रतिस्थापित किया है (स्कीमा-नाम को अपने डेटाबेस के साथ बदलें)।

<replace dir='../src' token='catalog="schema-name"' value=''> 

तो, पीढ़ी के बाद, विशेषता सूची हटा दी गई है।

यह एक कामकाज है, लेकिन कोड ने मेरे विकास में विभिन्न स्कीमा-नाम के साथ उत्पादन वातावरण में काम किया है।

संबंधित मुद्दे