2008-11-20 8 views
5

मेरे पास मेरे MYSQL डेटाबेस में एक टेबल है जिसमें प्राथमिक कुंजी नहीं है, लेकिन दो कॉलम पर एक अनूठी कुंजी है। उस तालिका के लिए मैपिंग बनाने के लिए माईक्लिप्स के हाइबरनेट रिवर्स इंजीनियर टूल का उपयोग करते समय, यह दो कक्षाएं उत्पन्न करता है, एक टेबल के नाम पर, और एक "आईडी" प्रत्यय के साथ। ऐसा लगता है कि आईडी वर्ग में समाप्त होने वाली अधिकांश उपयोगी विधियां, इसलिए ऐसा लगता है कि वह वही है जिसे आप तत्काल बनाएंगे और डेटा को बनाए रखने के लिए सहेज लेंगे। मैं इस तथ्य की सराहना कर सकता हूं कि आईडी वर्ग तालिका/मैप किए गए ऑब्जेक्ट में एक अद्वितीय पंक्ति का प्रतिनिधित्व करने के लिए बनाया गया है, लेकिन इसे दो वर्गों में विभाजित करने का क्या उपयोग है, और फिर, गैर-आईडी का उपयोग क्या है -फिक्स्ड क्लास?कुछ टेबल मैप करते समय MyEclipse की हाइबरनेट रिवर्स-इंजीनियरिंग कई कक्षाएं क्यों बनाती है?

मेरा सहकर्मी का तर्क है कि आप सिर्फ एक वर्ग के साथ ही पूरा कर सकते हैं और इन तालिकाओं जो एक प्राथमिक कुंजी नहीं है, के लिए रिवर्स इंजीनियरिंग का उपयोग कर मखौल उड़ाते हैं। दूसरी तरफ, मान लीजिए कि माईक्लिप्स डेवलपर्स मुझसे ज्यादा चालाक हैं और इस तरह से ऐसा करने का वास्तव में एक अच्छा कारण है। है?

उत्तर

0

आप मेरे दोस्त को बहुत अधिक मानते हैं। वे उपकरण वास्तव में माईक्लिप्स टीम से नहीं हैं, इसकी हाइबरनेट टूल्स प्रोजेक्ट (जेबॉस, हाइबरनेट के डेवलपर्स) से हैं।

यह एक कार्यक्रम संबंधी उपकरण है कि सब कुछ अनुमान नहीं कर सकते हैं। यह अच्छी तरह से अच्छी तरह से एनोटेटेड सामानों के लिए बहुत अच्छा है, लेकिन कभी-कभी, यह आपको वही उत्पन्न नहीं करेगा जो आपको चाहिए।

आईडी वर्ग आमतौर पर एक समग्र प्राथमिक कुंजी (एक चाबी कई विशेषताओं का उपयोग) का प्रतिनिधित्व करने की जरूरत है। यह घटक वर्ग हाइबरनेट अवधारणा का उपयोग करता है।

यह भी एक सा जनरेटर विकल्प tweak करना संभव है।

आपके मामले में, यह सबसे अच्छा होगा के रूप में अपने सहयोगियों का कहना है कि ऐसा करने के लिए होगा। अपनी खुद की इकाई वर्ग बनाएँ।

0

अपने रिवर्स इंजीनियर फ़ाइल में:

<table schema="public" name="yourtable"> 
      <primary-key> 
       <!-- generator may not be necessary for mysql --> 
       <generator class="increment"></generator> 
       <key-column name="column_name_of_primary_key" /> 
      </primary-key> 
     </table> 
0

मैं ने वही समस्या एक Teradata उदाहरण के खिलाफ ग्रहण में उपकरण चल रहा था। मेरे विपरीत रिवर्स के कई विचार थे, और वे एक स्कीमा में थे। मैं AcxiomDataId वर्ग इस के साथ उत्पन्न हो रही थी:

<table name="F_ACXM_MBR" class="AcxiomData"> 
    <primary-key> 
     <generator class="increment"></generator> 
     <key-column name="MBR_UNIQ_KEY" property="memberUniqKey" /> 
    </primary-key> 
</table> 

कोई विचार क्यों है:

<table catalog=".*" schema="U01TKE_GRPR_RADMT_VW" name="F_ACXM_MBR" class="AcxiomData"> 
    <primary-key> 
     <generator class="increment"></generator> 
     <key-column name="MBR_UNIQ_KEY" property="memberUniqKey" /> 
    </primary-key> 
</table> 

लेकिन स्कीमा को दूर करने और सूची तालिका तत्व से जिम्मेदार बताते हैं, मैं AcxiomDataId वर्ग नहीं मिला।

0

मुझे एक ही समस्या का सामना करना पड़ता है। मुझे लगता है कि जब आपके पास टेबल में कोई कुंजी नहीं है तो यह दो वर्ग उत्पन्न करता है। अन्यथा, यदि आपके पास तालिका में कोई कुंजी है तो यह केवल एक उत्पन्न करता है।

मेरे लिए कम से कम तालिका में प्राथमिक कुंजी को जोड़ने के बाद यह केवल एक वर्ग तालिका का प्रतिनिधित्व पैदा कर रहा है। अगर मैं प्राथमिक कुंजी को हटा देता हूं तो यह दो वर्ग उत्पन्न करता है।

पुराना धागा, लेकिन मैंने किसी के लिए उपयोगी सोचा।

0

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

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