2011-04-25 11 views
5

हम एक @MappedSuperclass class Entity जो डिफ़ॉल्ट आईडी परिभाषित करता है और जनरेटर है:मैप किए गए सुपरक्लास में घोषित @GeneratedValue को ओवरराइड कैसे करें?

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Override 
public K getId() { 
    return id; 
} 

मैं, सब पर उपवर्ग Foo में किसी भी जनरेटर का उपयोग नहीं करने के लिए क्योंकि मैं प्राथमिक कुंजी अपने आप को प्रदान करेगा चाहते हैं।

मुझे बेस क्लास Entity से Foo का विस्तार करना चाहिए, क्योंकि बहुत से और बहुत से फ़ंक्शन इस बेस क्लास पर निर्भर करते हैं। एनोटेशन @AttributeOverrides@GeneratedValue ओवरराइड करने का समर्थन नहीं करता है।

+0

संभावित डुप्लिकेट [मैं हाइबरनेट/जेपीए एनोटेशन का उपयोग करके जनरेशन टाइप रणनीति को कैसे ओवरराइड कर सकता हूं?] (Http://stackoverflow.com/questions/328202/how-do-i-override-the-generationtype-strategy-using- हाइबरनेट-जेपीए-एनोटेशन) –

उत्तर

0

मुझे लगता है कि Foo वास्तव में Entity का उपप्रकार नहीं है और इसे वास्तव में कभी विस्तारित नहीं किया जाना चाहिए। विरासत एक मजबूत अनुबंध है। आप कुछ तरीकों तक पहुंच प्राप्त करने के लिए बस कुछ नहीं बढ़ाएंगे।

हाइबरनेट में जब आप डेटाबेस से Foo ऑब्जेक्ट प्राप्त करते हैं तो आप वास्तव में इकाई तालिका से भी चयन कर रहे हैं। दोनों टेबल @Id फ़ील्ड के माध्यम से जुड़ गए हैं, आपको IdFoo में IdEntity में समान होगा।

यह हमें निम्नलिखित करने में सक्षम बनाता है।

Entity entity = new Foo(); 
if (entity instanceof Foo) { 
    //we have a Foo object 
} else if(entity instanceof ...) { 
    //we have a ... 
} 

यदि आप अपना खुद का आईडी आपूर्ति करना चाहते हैं तो आपको अब सुपर क्लास का विस्तार नहीं करना चाहिए। यदि आपके पास बहुत सारे तर्क हैं, तो आप कई हाइबरनेट कक्षाओं में शामिल करना चाहते हैं लेकिन वे कक्षा के वास्तव में उपप्रकार नहीं हैं, इसके बजाय @Embedded का उपयोग करने पर विचार करें।

+0

मुझे लगता है कि ज़ी ने उल्लेख किया है कि उनकी बेस क्लास एक मैप किए गए सुपरक्लास है और एक इकाई नहीं है, इसलिए उसकी मैप्डस्परक्लास को किसी टेबल पर मैप नहीं किया जाएगा और इसलिए शामिल होने का मुद्दा नहीं आएगा। बेस क्लास में आईडी के लिए अमूर्त तरीकों का उपयोग करना और व्युत्पन्न वर्ग में गेटर विधियों की व्याख्या करना तरीका प्रतीत होता है। – Shailendra

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