जेपीए की विरासत की अवधारणा सामान्य तालिकाओं पर आधारित है। यह वास्तव में PostgreSQL की तालिका विरासत के विचार को "प्राप्त" नहीं करता है। यह सुविधाओं के सबसे कम आम भाजक को उजागर करने के लिए डिज़ाइन की गई कल्पना के साथ काम करने की लागतों में से एक है और इसे पोर्टेबल रूप से करते हैं।
जेपीए वंशानुक्रम रणनीतियों के एक अच्छे सारांश के लिए यह मार्गदर्शिका देखें। ध्यान दें कि @Inheritance के लिए नए Java 6 JavaDoc में एक नोट है जिसमें कहा गया है कि:
<ब्लॉकक्वॉट>यदि वंशानुक्रम एनोटेशन निर्दिष्ट नहीं है या यदि किसी निकाय वर्ग पदानुक्रम के लिए कोई वंशानुक्रम प्रकार निर्दिष्ट नहीं किया गया है, तो SINGLE_TABLEमैपिंग रणनीति का उपयोग किया जाता है।
... और यदि आप देखें कि कैसे SINGLE_TABLE
काम करता है, यह आश्चर्य की बात नहीं है कि यह आपके लिए काम नहीं करता है; यह उम्मीद कर रहा है कि सभी उपवर्ग एक जादुई विवेचक मूल्य के साथ एक बड़ी तालिका में होंगे।
InheritanceType.TABLE_PER_CLASS
पीजी कैसे व्यवहार करता है, इसके करीब है, लेकिन मुझे संदेह है कि जेपीए इंप थोड़ा भ्रमित हो जाएगा जब बेस टाइप टेबल में पत्ते के प्रकार की प्रत्येक इकाई के लिए प्रविष्टियां होंगी। यह UNION
. जैसी चीज़ें करने की कोशिश करता है सुपरक्लास पर क्वेरी करते समय उपवर्ग तालिकाओं में क्वेरी, और यह अजीब परिणाम उत्पन्न कर सकता है - कम से कम दोहराव अगर UNION
उपयोग किया जाता है और यदि यह UNION ALL
. का उपयोग करता है तो प्रदर्शन संबंधी समस्याएं . प्रदाता इस रणनीति को कैसे लागू करता है, इसके आधार पर यह कम से कम आंशिक रूप से काम कर सकता है। आपको परीक्षण करना होगा, और परिणाम संभवतः काफी प्रदाता विशिष्ट होंगे।
जेपीए के लिए पीजी इनहेरिटेंस सपोर्ट के वास्तव में अच्छे कार्यान्वयन के लिए शायद एक नई इनहेरिटेंस रणनीति के लिए जेपीए प्रदाता एक्सटेंशन की आवश्यकता होगी जो इनहेरिटेंस के लिए पोस्टग्रेएसक्यूएल एक्सटेंशन और ONLY
के लिए समझी हो। प्रश्न।
यदि आप अपने जेपीए कार्यान्वयन को SELECT ... FROM ONLY subclass_table
. का उपयोग करने के लिए मना सकते हैं जब InheritanceType.TABLE_PER_CLASS
. में मोड तो इसे PostgreSQL इनहेरिटेंस के साथ इंटर-ऑपरेट करना चाहिए। यह प्रत्येक तालिका में केवल गैर-विरासत वाली पंक्तियों को देखेगा और उनके साथ काम करेगा जैसे कि वे साधारण टेबल थे। आपका अन्य गैर-जेपीए कोड तब वंशानुक्रम सुविधाओं का उपयोग करना जारी रख सकता है। मुझे लगता है कि यह संभव है कि आप ऐसा करने के लिए हाइबरनेट के लिए PostgreSQL बोली कोड को संशोधित कर सकते हैं, लेकिन व्यक्तिगत रूप से मैं वहां तब तक नहीं जाऊंगा जब तक कि मेरे पास बिल्कुल था न हो। जेपीए को मौजूदा पोस्टग्रेएसक्यूएल स्कीमा का समर्थन करने के लिए जो विरासत पर बहुत अधिक निर्भर करता है।