जब आप JaVers के लिए कोई ऑब्जेक्ट कमिट करते हैं, तो इसका पिछला संस्करण JaversRepository से लोड किया जाता है और वर्तमान संस्करण के साथ तुलना की जाती है (वह संस्करण जिसे आपने अभी-अभी कमिट () विधि में पास किया है)। इस मामले में JaVers GlobalIdका उपयोग करके पिछले संस्करण को ढूंढता है। कोड> क्वेरी इसलिए टाइपनाम + इकाई आईडी। यही कारण है कि आईडी संस्थाओं के लिए शून्य नहीं हो सकती।
दो संभावनाएं हैं:
- यदि इस वर्ग में शून्य आईडी सामान्य है (आपके डोमेन मॉडल के अनुसार) तो आपको इसे ValueObject जावर्स में।
-
यदि आप हाइबरनेट का उपयोग कर रहे हैं, तो आलसी लोडिंग प्रॉक्सी के साथ आम समस्या है। कुछ प्रश्नों के लिए, हाइबरनेट आपके वास्तविक डोमेन ऑब्जेक्ट्स को वापस नहीं करता है लेकिन गतिशील प्रॉक्सी ऑब्जेक्ट्स जो अनिवार्य रूप से खाली हैं (इसलिए शून्य आईडी)। यह तकनीक शायद स्मार्ट दिखती है, लेकिन आपकी वस्तुओं को तब तक कचरा बना देती है जब तक कि वे हाइबरनेट द्वारा आरंभ नहीं कर दी जाती हैं। हुक">हाइबरनेटUnproxyObjectAccessHook जो सफाई करता है:आपके डोमेन ऑब्जेक्ट को इनिशियलाइज़ करना और अन-प्रॉक्सी करना।
JaversBuilder.javers ()। withObjectAccessHook (नया HibernateUnproxyObjectAccessHook ())। निर्माण ()
यह हुक डिफ़ॉल्ट रूप से javers-spring-boot-starter-sql
. में सक्षम होता है लेकिन javers-spring-boot-starter-mongo
. में नहीं . यदि आप मोंगो स्टार्टर का उपयोग कर रहे हैं, तो अपने दम पर एक JaVers बीन बनाएं, जिसमें हुक सक्षम हो, देखें JaversMongoAutoConfiguration
।