2011-08-29 16 views
6

में i18n टेबल मैपिंग मैं जेपीए का उपयोग कर डेटाबेस (60 टेबलों) से तालिकाओं को मैप करने की कोशिश कर रहा हूं। मैं इसे बहुभाषी अनुप्रयोग के लिए कर रहा हूं, इसलिए डेटा के हर हिस्से को एक से अधिक भाषाओं में उपलब्ध होना चाहिए।जेपीए

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

enter image description here

यह जेपीए की बात आती है, मैं इसे कठिन एक तरीका है कि यथासंभव कम संघों की आवश्यकता होगी में यह मैप करने के लिए लगता है। मैंने माध्यमिक तालिका अवधारणा का उपयोग करने की कोशिश की है, लेकिन यह कुछ मौकों में विफल रहता है क्योंकि यह @OneToMany रिश्ते है। अधिमानतः, मैं एक समाधान के बारे में सोच रहा था जो इन दो तालिकाओं को एक वस्तु के रूप में प्रकट करेगा।

आपकी सहायता की सराहना की जाती है।

अग्रिम धन्यवाद।

+2

क्या आपको इस समस्या का समाधान मिला है? और यदि हां, तो क्या आप इसे साझा करना चाहते हैं (एक उत्तर के रूप में)? हमें एक ही समस्या का सामना करना पड़ रहा है, अभी तक कोई अच्छा समाधान नहीं मिला है (अधिकतर परिणाम एन + 1 प्रश्नों में, जिन्हें हम निश्चित रूप से नहीं चाहते हैं)। – wimvds

+0

आप किस जेपीए प्रदाता का उपयोग कर रहे हैं? – siebz0r

+0

मुझे पूरी तरह से समझ में नहीं आता है कि क्षेत्र और क्षेत्र भाषा के बीच एक सरल @OneToMany सहयोग क्यों आपके लिए काम नहीं करता है? –

उत्तर

0

मुझे यकीन नहीं है कि मैं इस अजीब आरेख को समझता हूं ... क्षेत्र भाषा में क्षेत्र की ओर इशारा करते हुए कुछ प्रकार की विदेशी कुंजी है। मैं इसे लेता हूं? यदि क्षेत्र में केवल एक कॉलम है (जैसा कि 'आरेख' पर दिखाया गया है), तो आप केवल 'क्षेत्रभाषा' को मानचित्रित कर सकते हैं और आपके पास केवल एक इकाई होगी जैसा आप चाहते थे --- कोई जानकारी खो गई नहीं;)।

लेकिन गंभीरता से, आप इसे कैसे मैप करना चाहते हैं? इस तरह

class Region { 
//.. the missing fields not shown in diagram 
    List<String> languages; // take only language to avoid creating separate entity for region language 
} 

या कुछ और: आप कुछ इस तरह करना चाहते हैं

class RegionInnerJoinRegionLanguage { 
// all fields from Region 
// all fields from RegionLanguage 
} 

किसी भी मामले आप यह नहीं कहा कैसे टेबल के बाकी अपने i18n तालिकाओं के साथ शामिल हो गए हैं में। आपके विवरण से, मैं अनुमान लगा रहा हूं कि सभी तालिकाओं में क्षेत्र भाषा के लिए fk है। मुझे यकीन नहीं है कि चीजों की भव्य योजना में क्षेत्र तालिका का क्या उपयोग किया जाता है। मुझे लगता है कि यह सिर्फ भाषाओं के समूह के लिए है ... मैं इस मॉडल 'स्विट्ज़रलैंड' (एक 'क्षेत्र' 4 भाषाओं) की कल्पना करता हूं ... लेकिन आप कई क्षेत्रों में बोली जाने वाली भाषाओं के साथ क्या करेंगे? क्या आपके पास कई फ्रेंच, अंग्रेजी इत्यादि भाषाएं हैं (प्रत्येक क्षेत्र के लिए एक) और उनमें से प्रत्येक के लिए सभी डेटा गुणा हो गया है ??

मुझे पता है कि आप इसके लिए नहीं पूछते हैं ... मुझे लगता है कि आपने इस प्रश्न के लिए अपनी डेटा संरचना को अधिक बढ़ाया है ... इतना है कि यह अनुमान लगाना मुश्किल है कि आप वास्तव में क्या हासिल करना चाहते हैं।

किसी भी मामले में, आप तार दृष्टिकोण की सूची उपयोग करना चाहते हैं, तो आप इस कोशिश कर सकते हैं:

@ElementCollection 
    @CollectionTable(name="RegionLanguage", 
     [email protected](name="regionID") // or whatever... it's not on your diagram. 
) 
    @Column(name="langage") 
    private List<String> langages; 

मैं अभी भी समझ में नहीं आता क्यों आप एक ही इकाई में दोनों तालिकाओं रखना चाहते हैं .. यदि यह 'केवल पढ़ने के लिए' डेटा है, तो आप एक दृश्य बनाने और इसे मैप करने का प्रयास कर सकते हैं --- हमेशा एक 'रास्ता बाहर';)। लेकिन यह (वास्तव में, दोनों) जटिलता से थोड़ा अधिक जटिलता है, यह मेरे दिमाग में --- यह आपको भविष्य में काटने जा रहा है। मेरी सलाह है कि 'सरल वन टॉनी मैपिंग' के साथ जाना है।