2012-03-31 12 views
5

मैं हाइबरनेट में नौसिखिया हूं। मुझे लेनदेन और फ्लशिंग के बारे में संदेह है ..हाइबरनेट लेनदेन और फ्लश के बारे में

जब भी हम किसी ऑब्जेक्ट को जारी रखना चाहते हैं तो हम एक सत्र खोलते हैं और लेनदेन शुरू करते हैं। यह सुनिश्चित करने के बाद कि इनमें से कौन सा पहला आता है और दूसरा अनुसरण करता है ......

1) session.getTransaction.commit(); 2) session.flush()

जो मैंने पढ़ा है उसके अनुसार() डेटाबेस को मान देता है। फ्लश() डेटाबेस को डेटाबेस को सिंक करता है।

इन दोनों के बीच क्या अंतर है।

उत्तर

8

session.flush() फ़्लशिंग प्रक्रिया करेगा जो हाइबरनेट सत्र द्वारा प्रबंधित सभी निरंतर वस्तुओं के लिए गंदे चेक करने के बारे में है। अगर किसी ऑब्जेक्ट को गंदे माना जाता है (यानी उस हाइबरनेट सत्र में संग्रहीत ऑब्जेक्ट का कोई भी मान अलग है डेटाबेस में इसी रिकॉर्ड), हाइबरनेट हाइबरनेट सत्र में संग्रहीत ऑब्जेक्ट को संबंधित डेटाबेस रिकॉर्ड के साथ समान मानों को बनाने के लिए इन मतभेदों को सिंक्रनाइज़ करने के लिए तत्काल डीबी को अद्यतन एसक्यूएल जारी करेगा।

हालांकि, केवल अद्यतन एसक्यूएल जारी करने का मतलब यह नहीं है कि संशोधित डेटा वास्तव में डीबी में सहेजा गया है, आपको वास्तव में डीबी में संशोधित डेटा को सहेजने की पुष्टि करने के लिए लेनदेन को कम करना होगा। इसका मतलब है कि आप कर सकते हैं UPDATE SQL द्वारा किए गए परिवर्तनों को रोलबैक करें यदि अद्यतन SQL को जारी करने के बाद कोई भी त्रुटि पाई जाती है लेकिन लेनदेन करने से पहले।

हाइबरनेट सत्र का फ़्लशिंग व्यवहार FlushMode पैरामीटर द्वारा निर्धारित किया जाता है जिसे session.setFlushMode() द्वारा कॉन्फ़िगर किया जा सकता है। डिफ़ॉल्ट मान FlushMode.AUTO है जैसे session.flush() लेनदेन करने और क्वेरी के निष्पादन से पहले स्वचालित रूप से होता है।

तो, जब session.getTransaction.commit() डिफ़ॉल्ट FlushMode में कहा जाता है, session.flush() परोक्ष session.getTransaction.commit() के निष्पादन से पहले निष्पादित किया जाएगा।

संबंधित मुद्दे