किसी कारण से जब मेरी सभी इकाइयों पर आलसी = सच है, तो बराबर() विधि सही ढंग से काम नहीं करती है जब एक तरफ आलसी लोड वाली इकाई होती है और दूसरी तरफ एक सामान्य इकाई होती है। यहां एक उदाहरण दिया गया है:जब आप आलसी = सत्य करते हैं तो हाइबरनेट इकाइयों के साथ काम करने के बराबर कैसे होते हैं?
if(activeTask.getTask().equals(task)) {...}
इस मामले में, सक्रिय टास्क का कार्य प्रॉक्सी होगा जबकि दाएं तरफ एक नियमित होगा। बराबर() असफल हो जाएगा। इस समस्या को ठीक करने के लिए, मैं अक्सर इस तरह की चीजें करता हूं:
if(activeTask.getTask().getId() == task.getId()) {...}
यह काम करता है, लेकिन यह आदर्श नहीं है। मैं अपने बराबर() विधि का उपयोग करना चाहूंगा।
क्या किसी के पास इस समस्या का कोई अच्छा समाधान है? यह वास्तव में इस तरह की चीजों के बारे में सोचने के लिए एप्लिकेशन के शोर के स्तर में जोड़ता है।
यदि मैं आलसी = झूठा कहता हूं, तो मुझे प्रॉक्सी से निपटने की ज़रूरत नहीं है, और इसलिए बराबर() काम करेगा। लेकिन इसका प्रदर्शन पर बहुत नकारात्मक प्रभाव पड़ता है।
यह कहना अच्छा नहीं है, "जब आप प्रॉक्सी का उपयोग करते हैं तो सभी मामलों में बराबर() काम करता है ... फिर बराबर() विश्वसनीय नहीं है।"
भयानक कामकाज –
आपको हाइबरनेट का उपयोग करते समय बराबर और हैशकोड में डेटाबेस आईडी का उपयोग नहीं करना चाहिए। Http://docs.jboss.org/hibernate/core/4.0/manual/en-US/html/persistent-classes.html#persistent-classes-equalshashcode –
HibernateProxyHelper.getClassWithoutInitializingProxy (obj) विरासत के साथ काम नहीं करता है क्योंकि देखें यह org.hibernate.proxy.LazyInitializer.getImplementation() के बजाय org.hibernate.proxy.LazyInitializer.getPersistentClass() पर कॉल करता है। –