का उपयोग क्यों न करें, जबकि वसंत के ओपनसेशन/EntityManagerInViewFilter के विषय पर बहुत सी पोस्ट लिखी गई हैं, मुझे कोई भी त्रुटि नहीं मिली जो इसकी त्रुटियों का उल्लेख करती है।वसंत के OpenEntityManagerInViewFilter
- फिल्टर एक सर्वलेट अनुरोध
- फिल्टर एक EntityManager खोलता को बीच में रोक और करने के लिए इसे बांधता है: मैं क्या समझते हैं, और एक @Transactional सेवा परत का उपयोग एक ठेठ स्तरित वेब अनुप्रयोग वास्तुकला संभालने से, इस प्रकार फिल्टर काम करता है वर्तमान धागा
- वेब नियंत्रक
- वेब नियंत्रक कहा जाता है सेवा कॉल
- लेन-देन इंटरसेप्टर एक नई लेन-देन शुरू होता है, धागा बाध्य EntityManager प्राप्त करता है और लेन-देन के लिए यह बांधता
- सेवा कहा जाता है, EntityManager के साथ कुछ सामान करता है, तो रिटर्न
- लेन-देन इंटरसेप्टर flushes EntityManager फिर लेन-देन
- वेब नियंत्रक दृश्य तैयार करता है, तो रिटर्न
- देखें बनाया गया है
- फ़िल्टर EntityManager और बंद कर देता है वर्तमान थ्रेड से इसे अनबिंड करता है
चरण 8 और 9 में, थ्रेड के EntityManager द्वारा लोड की गई वस्तुओं को अभी भी प्रबंधित किया जाता है। नतीजतन, अगर इन चरणों में आलसी संघों को छुआ है, तो वे अभी भी खुले EntityManager का उपयोग कर डेटाबेस से लोड हो जाएंगे। जो मैं समझता हूं, उससे प्रत्येक ऐसी पहुंच की आवश्यकता होगी कि डेटाबेस एक लेनदेन खोलें। वसंत के लेनदेन प्रबंधन से इस बारे में अनजान होगा, इसलिए मैं इसे "निहित लेनदेन" कहता हूं।
2 इस के साथ समस्याओं देखें:
- कई आलसी संघों लोड हो रहा है कई डेटाबेस लेनदेन में परिणाम होगा, प्रदर्शन पर एक संभव हिट
- जड़ वस्तु और उसके आलसी संघों विभिन्न डेटाबेस लेनदेन में लोड किए गए हैं, इसलिए डेटा संभवतः पुराना हो सकता है (उदाहरण के लिए थ्रेड 1 द्वारा लोड रूट, थ्रेड 2 द्वारा अद्यतन रूट एसोसिएशन, थ्रेड द्वारा लोड रूट एसोसिएशन 1)
एक ओर, इन 2 मुद्दों का उपयोग करने से इनकार करने के लिए पर्याप्त लगता है फ़िल्टर (प्रदर्शन हिट, डेटा असंगतता)। दूसरी तरफ, यह समाधान बहुत सुविधाजनक है, कोड की कई पंक्तियों को लिखने से बचाता है, समस्या 1 ध्यान देने योग्य नहीं हो सकता है और समस्या 2 शुद्ध परावर्तक हो सकती है।
आपको क्या लगता है?
धन्यवाद!