5

तो मैं कल इस प्रश्न पूछा, लेकिन गोल पोस्ट के माध्यम से बदल दिया है और सवाल अलग है:हाइबरनेट/जेपीए अनेक संबंध बनाने के लिए कई एक में शामिल होने की मेज और एक समग्र कुंजी, अद्वितीय बाधा मुद्दा

Hibernate/JPA Collection of Elements with Many to Many relationship?

मैं जानना चाहता हूं कि क्या ऐसी संस्थाएं बनाना संभव है जो मेरे आवश्यक रिश्ते को मॉडल करेंगे ताकि जब मैं अपना आवेदन फायर कर दूं तो हाइबरनेट मेरी स्कीमा तैयार करेगी।

संबंध मैं चाहता हूँ इस तरह दिखता है:

1 http://a8.sphotos.ak.fbcdn.net/hphotos-ak-ash4/417593_10150594114269218_505554217_8657377_1475865815_n.jpg

बात यह है कि जुड़ें तालिका वास्तव में पंक्तियों है कि किसी भी तत्व से लिंक नहीं करते समाहित कर सकता है। संरचना "प्रकार" और "मूल्य" जोड़ी के आधार पर तत्वों को वर्गीकृत करने का प्रतिनिधित्व करती है और इस विशेष एप्लिकेशन के बाहर सिस्टम में प्रवेश की जाती है।

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

यहाँ मैं अब तक क्या मिल गया है:

@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(name = "ELEMENT_ELEMENTCATOGORY", joinColumns = { 
     @JoinColumn(name = "type", referencedColumnName = "type"), 
     @JoinColumn(name = "value", referencedColumnName = "value") }) 
@Column(name = "category") 
public List<ElementCategory> getCategories() { 
    return categories; 
} 

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

+0

मुझे अभी भी लगता है कि आपको अपनी व्यस्त तालिका में ElementCategory की आईडी शामिल करने के लिए एक व्यस्त joinColumn की आवश्यकता है। – bvanvelsen

+0

क्या यह और अधिक तार्किक लगता है कि प्रकार और मूल्य एक इकाई है? इसलिए इस प्रकार की आईडी, मान इकाई संयुक्त – bvanvelsen

+0

के एक जॉइनकॉलम है, आईडी इस तथ्य में निहित है कि मेरे पास किसी भी सेट के साथ एलिमेंट श्रेणियों का एक सेट है। जैसा कि मैंने कहा था कि टेबल सही तरीके से स्थापित किए जा रहे हैं और इसमें शामिल तालिका में "श्रेणी" और ElementCategory तालिका में "आईडी" के बीच का लिंक शामिल है। क्या आपको लगता है कि उलटा जुड़ाव एलिमेंट टेबल से अनन्य बाधा को हटा देगा? मैं इसे आजमाऊंगा। – Link19

उत्तर

1

यह वास्तव में काफी तार्किक लगता है कि हाइबरनेट प्रकार और मूल्य कॉलम पर एक अद्वितीय बाधा डालता है।

आप @ManyToMany मैपिंग में कहते हैं कि संयुक्त रूप से joincolumns प्रकार और मान कॉलम हैं। तो मूल रूप से आप कहते हैं कि हाइबरनेट को यह निर्धारित करना चाहिए कि एलिमेंट श्रेणी से मूल्य और प्रकार की संपत्ति के अनुसार कौन सा तत्व जोड़ा गया है। इसलिए 1 गुणों का संयोजन अद्वितीय होना चाहिए। अन्यथा हाइबरनेट को पता नहीं होगा कि एलिमेंटटाइप

यदि आप चाहते हैं कि एकाधिक एलिमेंट इकाइयों को एकाधिक एलिमेंट टाइप इकाइयों के साथ जोड़ा जा सके और प्रकार और मान का संयोजन हमेशा अद्वितीय नहीं होता है, तो आप उन गुणों का उपयोग नहीं कर सकते joincolumns

+0

लेकिन फिर एलिमेंट क्लास में श्रेणियों की सूची रखने का कोई तरीका नहीं होगा? क्या यह सिर्फ कठिन भाग्य है क्योंकि इसे बेहतर डिजाइन की आवश्यकता है? – Link19

+0

इसमें श्रेणियों की एक सूची हो सकती है, लेकिन टाइप और वैल्यू पर आधारित नहीं है यदि उन 2 मान प्रत्येक तत्व – bvanvelsen

+0

के लिए अद्वितीय नहीं हैं, लेकिन मेरी मॉडल श्रेणियों में प्रकार और मान के संयोजन पर आधारित हैं और कई तत्वों के पास एक ही जोड़ी, तो मेरे लिए हाइबरनेट को प्रबंधित करना असंभव है? सबसे अच्छा मैं कर सकता हूं मेरी सेवा में कुछ कार्यक्षमता लागू करता है जो अलग-अलग श्रेणियों से संबंधित है और सूची क्षणिक बनाता है। – Link19