2012-01-15 9 views
10

मुझे थोड़ी किस्मत के साथ Map<String, Set<Entity>> जैसे मानचित्र को बनाए रखने के लिए हाइबरनेट का उपयोग करने में सक्षम होने में बहुत कुछ देखा गया है (विशेष रूप से जब से मैं इसे सभी एक टेबल पर रखना चाहता हूं)।क्या कोई नक्शा एक सेट होने के साथ एक मानचित्र को बनाए रखने का एक बेहतर तरीका है?

Mapping MultiMaps with Hibernate वह चीज है जो सबसे ज्यादा संदर्भित प्रतीत होती है, जो विस्तार से बताती है कि UserCollectionType का उपयोग करके इसे कैसे कार्यान्वित किया जाए।

मैं सोच रहा था, क्योंकि यह चार साल पहले लिखा गया था, क्या अब इसे करने का कोई बेहतर तरीका है?

तो, उदाहरण के लिए, मैं EntityA पर Map<String, Set/List<EntityB>> जैसे मानचित्र पर होना चाहता हूं। EntityA और EntityB (EntityB एक विदेशी कुंजी EntityA वापस करने के लिए होने के साथ):

दो तालिकाओं वहाँ होगा।

मुझे कोई इंटरमीडिएट टेबल नहीं चाहिए।

+1

आईएमओ अभी भी – Firo

+0

जाने का तरीका है, मुझे नहीं लगता कि यह डाउनवॉटिंग या क्लोजिंग के योग्य क्यों है। प्रस्तुत किया गया एक "सर्वश्रेष्ठ" तरीका था लेकिन चार साल का था।मुझे नहीं लगता कि यह पूछने के लिए अनुचित है कि अब कोई बेहतर तरीका है या नहीं। शायद मुझे कम वर्बोज़ या सरल के रूप में बेहतर योग्यता प्राप्त करनी चाहिए, लेकिन फिर भी यह वास्तव में तर्कवादी या राय नहीं है। कोई जवाब है या नहीं है। डाउनवोट की क्षतिपूर्ति करने के लिए – AHungerArtist

+0

+1। आईएमओ एक कानूनी सवाल है। – Firo

उत्तर

-1

यह निर्भर करता है :) जब चीजें जटिल हो रही हैं, तो आपको समझना चाहिए कि आपका आवेदन क्या कर रहा है।

कुछ स्थितियों में, आप अपने सेट को ट्रीसेट के रूप में प्रस्तुत कर सकते हैं, और इस ट्रीसेट को ऑर्डर किए गए कोडित स्ट्रिंग, जैसे कि "" 1 "," 8 "," 12 "] में दर्शाते हैं, जहां 1, 8, 12 प्राथमिक हैं कुंजी, और फिर चलिए कोड लिखें!

जाहिर है, यह मेरी राय में, एक सामान्य सवाल है, इसका सामान्य जवाब नहीं है।

public static String toXML(Object instance) { 
    XStream xs = new XStream(); 
    StringWriter writer = new StringWriter(); 
    xs.marshal(instance, new CompactWriter(writer)); 
    return writer.toString(); 
} 

और उसके बाद बने के लिए हाइबरनेट में Lob प्रकार का उपयोग:

@Lob 
@Column(nullable = false) 
private String data; 

मैं

1

तरह से कैसे अपने मेरे वर्तमान परियोजना पर किया है कि हम Xstream का उपयोग कर xml करने के लिए सेम/संग्रह बदलने है इस दृष्टिकोण को बहुत सामान्य पाया गया है और आप इसके साथ लचीली कुंजी/मूल्य भंडारण को प्रभावी ढंग से कार्यान्वित कर सकते हैं। आपको एक्सएमएल प्रारूप पसंद नहीं है तो एक्सस्ट्रीम फ्रेमवर्क में वस्तुओं को JSON में बदलने के लिए अंतर्निहित ड्राइवर है। इसे आज़माएं, यह वास्तव में अच्छा है।

चीयर्स

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

मैंने उत्पादों के लिए डेटाबेस डिज़ाइनों की संख्या देखी है जहां लचीला और गतिशील (यानि डाउनटाइम के बिना डोमेन ऑब्जेक्ट्स के लिए नए गुणों का निर्माण) स्कीमा की आवश्यकता है और उनमें से कई डोमेन गुणों और स्वामी ऑब्जेक्ट्स से संदर्भ संग्रहीत करने के लिए कुंजी/मान सारणी का उपयोग करते हैं एक बच्चे के लिए। उन उत्पादों को लाखों डॉलर (बैंकिंग/टेलको) की लागत है, इसलिए मुझे लगता है कि यह डिज़ाइन पहले ही प्रभावी साबित हुआ है।

क्षमा करें, यह आपके मूल प्रश्न का उत्तर नहीं है क्योंकि आपने इंटरमीडिएट टेबल के बिना समाधान के बारे में पूछा था।

+0

दिलचस्प समाधान। हालांकि, यह दुर्भाग्यवश, खोज में उपयोग करने में बहुत मुश्किल/अक्षम है। – AHungerArtist

+0

संपादन में जवाब दिया। –

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

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