2010-09-07 10 views
9

मेरे पास एक मौजूदा डीबी स्कीमा है जिसे मैं जेपीए/हाइबरनेट एनोटेशन के साथ ऑर्डर करने की कोशिश कर रहा हूं। स्कीमा को पर डिज़ाइन किया गया है ताकि क्लाइंट को तालिका में प्रत्येक पंक्ति के साथ अतिरिक्त जानकारी को अलग किया जा सके। एक कुंजी-मान पैटर्न का उपयोग करने के बजाय मौजूदा समाधान स्थापित समय पर गतिशील कॉलम की आवश्यक संख्या निर्धारित करता है, और तालिका को में गतिशील फ़ील्ड के लिए अतिरिक्त कॉलम जोड़ता है। असल में प्रत्येक तालिका में ज्ञात/निश्चित कॉलम और गतिशील कॉलम का समूह होता है।जेपीए/हाइबरनेट मैपिंग डायनामिक कॉलम ऑब्जेक्ट्स की सूची के रूप में

|table:X| 
|id|known1|known2|dynamic1|dynamic2|..|dynamicx| 

एक पैरामीटर तालिका को इंगित करता है जो टेबल अतिरिक्त गतिशील क्षेत्रों

|table:parameter| 
|table|column|meta| 
|x|dynamic1|| 
|x|dynamic2|| 
|x|dynamicx|| 
|y|dynamic15|| 

जेपीए इस मॉडलिंग में है, यह प्रत्येक मेज पर ज्ञात तय स्तंभों के लिए एक परिभाषा बनाने के लिए आसान है।

@Entity 
@Table(name="x") 
public class X 
{ 
    @Id 
    private Long id = null; 

    @Column(name="known1") 
    private Long known1 = null; 
} 

मैं एक वर्ग के रूप में पैरामीटर तालिका मॉडल, और फिर मानकों की एक सूची है करने के लिए अपने वर्गों में से प्रत्येक के लिए अनुमति देने की योजना है। मुझे यकीन है कि मुझे इस सूची ऑब्जेक्ट को मैप करने के बारे में कैसे जाना चाहिए ताकि विवरण एक ही तालिका में लिखे जाएं।

@Entity 
@Table(name="x") 
public class X 
{ 
    // @Column(name="x",class="X") ?????????? 
    List<Parameter> dynamicColumns = null; 
} 

मेरा मानना ​​है कि मैं गतिशील क्षेत्र के कॉलम नाम को सही ढंग से निर्धारित करने के लिए कस्टम नामकरण रणनीति का उपयोग कर सकता हूं। क्या यह मैपिंग का प्रकार भी संभव है?

+1

मुझे आशा है कि आप डेटाबेस बदलने में सक्षम हैं है ... यह एक स्कीमा है कि कुछ सामान्य जरूरत की तरह लगता है। इस प्रश्न के लिए – Zoidberg

+0

मान लें कि मैं नहीं कर सकता। मुझे लगता है कि मैं ईंट की दीवार मारने के करीब हूँ। – emeraldjava

उत्तर

1

मुझे लगता है कि आपको jpa का उपयोग करके इस गतिशील डेटा को प्राप्त करने के लिए मूलभूत उपयोग करने की आवश्यकता होगी।

+0

+1: मुझे लगता है कि जेपीए इस तरह की ज़रूरत के लिए डिज़ाइन नहीं किया गया था, और यदि आप इसे करने में कामयाब होते हैं, तो यह एक बड़ी कीमत (और गंदे हैक्स) पर होगा। जब भी संभव हो, मूल प्रश्नों और 'परिणाम ट्रान्सफॉर्मर' का उपयोग करें, यह सब हाइबरनेट यहां प्रदान कर सकता है। – Vincent

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। किसी लेखक से स्पष्टीकरण की आलोचना या अनुरोध करने के लिए, अपनी पोस्ट के नीचे एक टिप्पणी छोड़ दें। – Chaos

+0

@Cos यह मेरी विनम्र राय में आलोचना के रूप में नहीं है, इस समस्या को हल करने का यह सबसे अच्छा तरीका है यानी तालिका से गतिशील कॉलम की एक सूची पूछताछ। – AmanicA

0

हाइबरनेट में यह संभव है, कृपया नीचे दिया गया लेख देखें। हालांकि यह एक पुराना दृष्टिकोण है (2007) मैं खुद जेपीए का उपयोग करके इसे लागू करने के लिए सिर तोड़ रहा हूं। नहीं सफल रहा अब तक

http://www.infoq.com/articles/hibernate-custom-fields

इस विषय में एक और ईमेल थ्रेड

https://www.java.net//node/666078

+1

अंततः गायब होने के कारण लिंक-केवल उत्तर दृढ़ता से निराश होते हैं। –

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