यह एक हिब्रनेर पॉलीमोर्फिज्म प्रश्न और डेटा मॉडल डिज़ाइन प्रश्न है; वे intertwingled हैं। मैंने अतीत में में हाइबरनेट का उपयोग किया है और इसका आनंद लिया है, लेकिन कभी-कभी मुझे कुछ भी नहीं बल्कि छोटे डिजाइनों के बारे में सोचना मुश्किल लगता है। हाइबरनेट पर दस्तक नहीं; बस एक अवलोकन है कि आम तौर पर ओआरएम चुनौतीपूर्ण हो सकता है।हाइबरनेट पॉलीमोर्फिज्म
मुझे लगता है कि यह एक हाइबरनेट 101 प्रश्न है, लेकिन मुझे यकीन नहीं है। जो मैं हासिल करने की कोशिश कर रहा हूं वह भी संभव नहीं हो सकता है।
मेरे पास एक अमूर्त वर्ग फल है जिसे ऐप्पल और ऑरेंज में उपclassed जाएगा। मेरे पास नोट नोट है जो एप्पल और संतरे के बारे में नोट्स या टिप्पणियों का प्रतिनिधित्व करता है। एक ऐप्पल या ऑरेंज में इसके साथ जुड़े कई नोट्स हो सकते हैं, लेकिन किसी दिए गए नोट से जुड़े केवल एक ऐप्पल या ऑरेंज कभी भी होगा।
यहां कक्षाओं के स्केच हैं, जहां मैं अब ऑब्जेक्ट आईडी के जाने और एप्पल के गुणों को छोड़कर को ऑरेंज से अलग करता हूं। समय के लिए, मैं दृढ़ता से महसूस नहीं करता कि मैं किस हाइबरनेट विरासत रणनीति का उपयोग करता हूं।
abstract public class Fruit {
}
// Apples have notes written about them:
public class Apple extends Fruit {
private Set<Note> note;
...
@OneToMany(cascade = CascadeType.ALL)
public Set<Note> getNote() {
return note;
}
}
// Oranges have notes written about them:
public class Orange extends Fruit {
private Set<Note> note;
...
@OneToMany(cascade = CascadeType.ALL)
public Set<Note> getNote() {
return note;
}
}
यहाँ, नोट वर्ग वर्तमान में लागू है जिसमें हम देखते हैं कि यह दोनों एक एप्पल और एक ऑरेंज के लिए खाने हैं। इस डिजाइन में दोष या असंगतता यह है कि एक एकल नोट उदाहरण केवल ऐप्पल या ऑरेंज में से एक को इंगित करेगा, और कभी भी दोनों नहीं। इसलिए यदि कोई नोट एक ऐप्पल से जुड़ा हुआ है, तो ऑरेंज फ़ील्ड अनिवार्य और अस्पष्ट है, और उपाध्यक्ष।
// A note about an Apple or Orange
public class Note {
private String theNote;
private Apple apple;
private Orange orange;
...
// with the usual many to one mapping
@ManyToOne
@JoinColumn(name = "apple_id")
public Apple getApple() {
return apple;
}
// with the usual many to one mapping
@ManyToOne
@JoinColumn(name = "orange_id")
public Orange getOrange() {
return orange;
}
...
}
बहरहाल, यह नोट वर्ग मुझे लगता है कि कि मैं पर मेरे डिजाइन का आधार करना चाहते है, लेकिन मुझे यकीन है कि सम्मान के साथ इस बारे में सोचने के लिए कैसे एनोटेशन और तालिका मानचित्रण हाइबरनेट करने के लिए नहीं कर रहा हूँ:
// A note about a fruit:
public class Note {
private String theNote;
private Fruit fruit;
...
}
जहां फल या तो ऐप्पल या ऑरेंज उदाहरण होगा।
क्या बाद में नोट क्लास, फल के संदर्भ में, जो वास्तव में एक ऐप्पल या ऑरेंज धारण करेगा, यहां तक कि हाइबरनेट ओआरएम मैपिंग के साथ भी मिल जाएगा? यदि हां, तो कृपया किसी के बारे में बात कर सकते हैं।
मेरे कोड को MySQL डेटाबेस पर चलने के कारण मुझे एक ही समस्या है। क्या आप मेरे संबंधित प्रश्न के साथ मेरी मदद करने के इच्छुक हैं? यहां लिंक है: http://stackoverflow.com/questions/25252541/generatedvalue-for-a-java-abstract-superclass-over-mysql – CodeMed