एकल सत्र:
यहाँ इस विषय पर कुछ संदर्भ हैं। लेनदेन शुरू करें जब आपको संचालन का एक सेट करने की आवश्यकता होती है (जैसे डायलॉग बॉक्स ओके बटन के बाद डेटा अपडेट करें), अंत में टीएक्स को प्रतिबद्ध करें। हालांकि कनेक्शन लगातार खुला रहता है (क्योंकि यह वही सत्र है), और इस प्रकार कैशिंग के लिए सभी अवसरों का उपयोग हिब और आरडीबीएमएस दोनों द्वारा किया जा सकता है।
कनेक्शन समाप्त होने पर पारदर्शी सत्र को फिर से खोलने के लिए भी एक अच्छा विचार हो सकता है - उपयोगकर्ता विस्तारित अवधि के लिए आवेदन खोलने के लिए जाते हैं, और इसे सोमवार को काम करना जारी रखना चाहिए भले ही डीबी सर्वर सप्ताहांत पर रिबूट किया गया था। सत्र के लिए आंशिक (अवांछित) अद्यतन:
अद्यतन
जेन्स Schauder कई सत्रों का उपयोग करने के लिए एक कारण प्रदान की है। खैर, यह हाइबरनेट का उपयोग करने के तरीके के नीचे आता है।
मान लीजिए कि हमारे पास दो संवाद खुले हैं (जैसा कि जेन्स के ब्लॉग उदाहरण में)। यदि उपयोगकर्ता रेडियोबॉक्स पर क्लिक करता है, और हम तुरंत इस रेडियोबॉक्स से जुड़े एक हाइबरनेट इकाई को अपडेट करते हैं, तो जब उपयोगकर्ता रद्द करता है, तो हम परेशानी में हैं - सत्र पहले ही अपडेट हो चुका है।
सही तरीके से, जैसा कि मैंने इसे देखा है, केवल संवाद चर (गैर-हाइबरनेट ऑब्जेक्ट) को अपडेट करना है। फिर, जब उपयोगकर्ता ठीक क्लिक करता है, तो हम एक लेनदेन शुरू करते हैं, अद्यतन वस्तुओं को मर्ज करते हैं, लेनदेन करते हैं। कोई कचरा कभी सत्र में सहेजा नहीं जाता है।
MyHibernateUtils.begin();
Settings settings = DaoSettings.load();
// update setttings here
DaoSettings.save(settings);
MyHibernateUtils.commit();
हम चिंताओं में से इस तरह के एक स्वच्छ जुदाई लागू करते हैं तो हम बाद में MyHibernateUtils.begin() कार्यान्वयन का एक सरल परिवर्तन के साथ कई सत्रों के लिए स्विच कर सकते हैं।
संभावित स्मृति रिसाव के लिए, अच्छी तरह से ... Transaction.commit() सत्र सत्र। फ्लश(), जो AFAIK, कैश को भी साफ करता है। साथ ही, कोई सत्र.सेट कैशमोड() को कॉल करके कैशिंग नीति को मैन्युअल रूप से नियंत्रित कर सकता है।
अच्छे अंक, जेन्स! –