के साथ ऐतिहासिक डेटा संग्रहीत करना यह ऐतिहासिक डेटा हैंडलिंग के बारे में एक समस्या है। मान लीजिए आप निम्न में से एक की तरह एक वर्ग MyClass है:जावा और हाइबरनेट
class MyClass {
String field1;
Integer field2;
Long field3;
getField1() {...}
setField1(String ...) {...}
...
}
अब, लगता है मुझे MyClass की दुकान और पुराने डेटा पुनः प्राप्त करने में सक्षम बनाने की जरूरत है, यह करने के लिए सबसे अच्छा तरीका क्या है?
आवश्यकताएँ हैं भी हाइबरनेट के माध्यम से कक्षाएं जारी रहती है। और प्रति "इकाई" सबसे दो तालिकाओं पर है करने के लिए: केवल एक तालिका या "निरंतरता" वर्ग (एक जो इकाई जो समय के साथ विकसित का प्रतिनिधित्व करता है) (ऐतिहासिक डेटा के लिए और एक अन्य तालिका के रूप में यह सुझाव दिया है के लिए एक मेज here)
कृपया ध्यान दें कि मुझे फ़ील्ड के मानों के लिए मनमाने ढंग से वैध समय असाइन करने में सक्षम होना चाहिए।
वर्ग की तरह एक अंतरफलक होना चाहिए:
class MyClass {
// how to store the fields????
getField1At(Instant i) {...}
setField1At(Instant i, String ...) {...}
...
}
मैं वर्तमान में JTemporal पुस्तकालय का उपयोग कर रहा है, और यह एक TemporalAttribute<T>
वर्ग है, जो एक मानचित्र की तरह है: आप T myAttr.get(Instant i)
जैसे काम कर सकें पाने के लिए Instant i पर myAttr का संस्करण। मुझे पता है कि हाइबरनेट के साथ एक तालिका में टेम्पोरल एट्रिब्यूट कैसे जारी रखना है (यह आसान है: मैं टेम्पोरलएट्रिब्यूट द्वारा उपयोग किए गए सॉर्टेडैप को जारी रखता हूं और आपको स्टार्ट और एंड वैध समय और विशेषता का मान) के साथ एक टेबल मिलता है।
असली समस्या यह है कि यहां हमारे पास कई विशेषताएं हैं।
मेरे पास एक समाधान है लेकिन यह स्पष्ट नहीं है, और मैं आपके विचार सुनना चाहता हूं।
मैंने मैनुअल को मैन्युअल पढ़ा है, लेकिन मैं यह समझने में सक्षम नहीं था कि एक संशोधन और समाप्ति वैधता समय में संशोधन करना संभव है, और Enver को स्वयं को असाइन करने दें। मुझे यही चाहिए, क्योंकि मुझे केवल संशोधन को स्टोर करने की आवश्यकता नहीं है, बल्कि यह भी तय करने के लिए कि संशोधन कब वैध था। – cdarwin
आप अपनी खुद की संशोधन इकाई को कार्यान्वित कर सकते हैं (http://docs.jboss.org/envers/docs/index.html#revisionlog देखें) और कस्टम टाइमस्टैम्प जोड़ें। क्या आप यही खोज रहे हैं? –
जहां तक मैंने देखा है, यदि मैं अपनी वैधता तिथियों को अतिरिक्त संशोधन डेटा में डालता हूं तो मैं उन्हें एक क्वेरी क्वेरी में निर्दिष्ट नहीं कर सकता (मुझे इस बारे में पूरी तरह से यकीन नहीं है)। मैं Envers (http://jboss.org/envers/downloads/envers_seam_demo.zip) के साथ उपलब्ध बिटमैपोरल डेटाबेस के कोड के माध्यम से खुदाई कर रहा हूं, और मुझे लगता है कि फ़ील्ड्स "सामान्य" वर्ग से संबंधित हैं, भले ही नमूना कोड काफी पुराना है हालांकि एक बड़ी समस्या है (आपके लिंक से उद्धरण): "जैसा कि संशोधन वैश्विक हैं, आपके पास अधिकतम एक संशोधन इकाई हो सकती है" - जबकि मुझे "स्थानीय" डेटा की आवश्यकता होती है, यानी एक विशिष्ट इकाई – cdarwin