2009-07-16 6 views
9

हाइबरनेट के साथ मैप किए गए एक ऑब्जेक्ट में अजीब व्यवहार है। यह जानने के लिए कि वस्तु अजीब तरीके से क्यों व्यवहार करती है, मुझे यह जानने की जरूरत है कि उस वस्तु को गंदे बनाता है। क्या कोई मेरी मदद कर सकता है और मुझे संकेत दे सकता है?कैसे पता चलेगा कि हाइबरनेट ने ऑब्जेक्ट को गंदे बना दिया है?

ऑब्जेक्ट जावा/स्प्रिंग संदर्भ में जावा क्लास है। इसलिए मैं जावा प्लेटफॉर्म को लक्षित करने का उत्तर पसंद करूंगा।

संपादित करें: मैं हाइबरनेट गंदे राज्य तक पहुंच प्राप्त करना चाहता हूं और यह सत्र से जुड़े किसी ऑब्जेक्ट पर कैसे बदलता है। मुझे नहीं पता कि कोड का एक टुकड़ा कैसे मदद करेगा।

वास्तविक समस्या के लिए: एक स्प्रिंग ट्रांज़ेक्शन मैनेजर द्वारा प्रबंधित लेनदेन के अंदर मैं ऑब्जेक्ट्स पर कुछ (पढ़ा) प्रश्न करता हूं और इन ऑब्जेक्ट्स पर एक स्पष्ट सहेजने के बिना वे लेनदेन प्रबंधक द्वारा सहेजे जाते हैं क्योंकि हाइबरनेट सोचता है कि इनमें से कुछ (और सब नहीं) गंदे हैं। अब मुझे यह जानने की जरूरत है कि हाइबरनेट क्यों सोचता है कि वे वस्तुएं गंदे हैं।

+0

सटीक त्रुटि/समस्या प्लस कुछ कोड हो सकता है आप एक जवाब – jitter

उत्तर

6

मैं एक इंटरसेप्टर का प्रयोग करेंगे। ऑनफ्लशडिडी विधि वर्तमान और पिछली स्थिति प्राप्त करती है ताकि आप उनकी तुलना कर सकें। इंटरसेप्टर इंटरफ़ेस को कार्यान्वित करें और FullushDirty पर ओवरराइड करते हुए EmptyInterceptor का विस्तार करें। फिर config.setInterceptor का उपयोग कर उस वर्ग का एक उदाहरण जोड़ें (वसंत के लिए आपको इसे अलग-अलग करने की आवश्यकता हो सकती है)। आप स्टार्टअप के बजाय सत्र में एक इंटरसेप्टर भी जोड़ सकते हैं।

Here is the documentation on interceptors.

+0

कि आपको बता नहीं होगा * क्या * एक वस्तु गंदा केवल जो खेतों गंदा कर रहे हैं बनाया के लिए एक बेहतर मौका मिल सकता है में से कुछ आगे विवरण। वस्तु के बाद अक्सर लेनदेन के अंत में, फ्लश होता है। – Nat

0

मानते हैं कि ऑब्जेक्ट की स्थिति को सीधे एक्सेस नहीं किया जा सकता है (उदाहरण के लिए कोई सार्वजनिक या पैकेज संरक्षित फ़ील्ड नहीं) और प्रतिबिंब के साथ झुका हुआ नहीं है, आप ऑब्जेक्ट के सभी तरीकों की शुरुआत में ब्रेकपॉइंट डाल सकते हैं और परिदृश्य जो ऑब्जेक्ट को डीबगर में गंदा बनाता है।

0
  1. एक टेस्ट केस या इसी तरह बनाएं, ताकि आप एक क्लिक के साथ समस्या को पुन: उत्पन्न कर सकें।
  2. org.hibernate के लिए लॉग इन करना सक्षम स्ट्रिंग के लिए लॉगिंग "गंदे" (वास्तव में आप org.hibernate के सभी की जरूरत नहीं है की जाँच, लेकिन मैं सही लकड़हारा पता नहीं है।
  3. कार्यक्रम में स्पॉट का पता लगाएं , एक जहां इकाई गंदे नहीं है, जहां वह गंदा है। दो बिंदुओं के बीच कोड के बीच का पता लगाएं, और ग़लत मूल्य लॉगिंग के लिए वहां एक लॉगिंग कथन डालें। रणनीति के साथ जारी रखें जब तक आप कोड को कम नहीं कर लेते एक पंक्ति।
  4. बाहर हाइबरनेट कोड जाँच करें। कोड उस गंदे जाँच करता है का पता लगाएं। इसके माध्यम से कदम के लिए एक डिबगर का प्रयोग करें।
संबंधित मुद्दे