2013-03-07 4 views
7

का उपयोग किए बिना हाइबरनेट इंटरफेस मैपिंग मैं हाल ही में अपनी कुछ हाइबरनेट मैप किए गए इकाइयों के लिए इंटरफेस पेश करने की कोशिश कर रहा हूं और मैपिंग को कॉन्फ़िगर करने का तरीका नहीं समझ सकता।एनोटेशन पैरामीटर "targetEntity"

org.hibernate.MappingException: Could not determine type for: ...MyInterface 

तब मुझे पता चला है कि सब कुछ ठीक काम करता है, जब मैं targetEntity स्पष्ट रूप से परिभाषित:

जब मैं किसी भी आगे की घोषणाओं के बिना इंटरफेस का इस्तेमाल किया, मैं हमेशा निम्नलिखित अपवाद मिला

@OneToOne(targetEntity=InterfaceImpl.class) 
    private MyInterface myInterface; 

दुर्भाग्य से, यह समाधान मेरे मामले में काम नहीं करता है: मैं एनोटेशन के माध्यम से लक्ष्य एंटीटी को परिभाषित नहीं कर सकता क्योंकि मैं इस कक्षा को एक सामान्य बाहरी पुस्तकालय में निकालना चाहता हूं जिसमें इंटरफ़ेस के अंतिम कार्यान्वयन को शामिल नहीं किया जाएगा और यहां तक ​​कि नहीं पता होगा।

तो क्या यह घोषणा करने का एक वैकल्पिक तरीका है कि कौन सा कार्यान्वयन किया जाना चाहिए, कि मैं निकाली गई लाइब्रेरी के बाहर उपयोग कर सकता हूं? enter image description here

उत्तर

1

अपने मैपिंग अनुबंध को एक सार @MappedSupperclass में परिभाषित करें और फिर कार्यान्वयन कक्षा में @AssociationOverride के साथ इसे ओवरराइड करें।

+0

अच्छा विचार, तकनीकी रूप से। दुर्भाग्य से, मुझे वास्तव में इंटरफेस की आवश्यकता है। सार सुपरक्लास इस चाल को नहीं करेंगे क्योंकि मुझे अपनी जरूरतों को पूरा करने के लिए बहु-विरासत की आवश्यकता होगी। उपयोगकर्ता (ऊपर उदाहरण देखें) एकाधिक इंटरफेस को लागू करने में सक्षम होना चाहिए। उदाहरण के लिए, वह ब्लॉग आर्टिकल और टिप्पणियों के लेखक दोनों लेखक हैं। मैंने उपरोक्त इसका उल्लेख नहीं किया। माफ़ कीजिये। – Pumuckline

1

मुझे यकीन है कि कैसे हाइबरनेट एनोटेशन के साथ चीजें काम नहीं कर रहा हूँ, लेकिन मैं कुछ इसी तरह वर्णित here

एक बहुत विस्तृत विवरण के लिए पिछले पोस्ट देखें किया था।

मूलभूत आवश्यकता इस अर्थ में समान थी कि हमने हाइबरनेट मैपिंग फाइलों में इंटरफेस निर्दिष्ट किए थे और कार्यान्वयन कक्षाएं ज्यादातर जातिवादियों के साथ रनटाइम पर बनाई गई थीं (वे अस्तित्व में संकलित समय नहीं थे)।

आपको क्या करना होगा कोड है जो रनटाइम पर इंटरफेस और उपाध्यक्ष प्रतिकूल से कार्यान्वयन वर्ग हल कर सकते हैं और हाइबरनेट को

(क) बनाने के कार्यान्वयन की अनुमति के लिए एक विस्तार बिंदु के रूप में हाइबरनेट tuplizer/instantiator ठेके उपयोग करने के लिए है उदाहरण के लिए जब इसे डीबी और (बी) से किसी इकाई को पॉप्युलेट करने की आवश्यकता होती है तो बीबी को एक इकाई (कार्यान्वयन उदाहरण) को स्टोर करने की आवश्यकता होने पर हाइबरनेट मैपिंग मेटा-डेटा का पता लगाएं।

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