मैं कमांड पैटर्न का उपयोग करके प्रयोग कर रहा हूं ताकि मेरी वेब परत को एक ही लेनदेन के संदर्भ में हाइबरनेट इकाइयों के साथ काम करने की अनुमति मिल सके (इस प्रकार आलसी लोडिंग अपवादों से परहेज किया जा सके)। हालांकि, मैं अब उलझन में हूं कि लेनदेन से मुझे कैसे निपटना चाहिए।वसंत @ ट्रांसेक्शनल रीड-ओनली प्रचार
मेरे आदेश सेवा परत विधियों को कॉल करते हैं जो @Transactional
एनोटेशन के साथ एनोटेटेड हैं। इनमें से कुछ सेवा परत विधियां केवल पढ़ने के लिए हैं - उदा। @Transactional(readOnly=true)
- और कुछ पढ़े/लिखते हैं।
मेरी सेवा परत एक कमांड हैंडलर का खुलासा करती है जो वेब परत की तरफ से पास किए गए आदेश निष्पादित करती है।
@Transactional
public Command handle(Command cmd) throws CommandException
मुझे लगता है मैं सही आदेश हैंडलर के handle()
विधि व्यवहार बनाने में कर रहा हूँ। यह वह जगह है जहां भ्रम आता है। यदि कमांड के कार्यान्वयन से कई सर्विस लेयर विधियों को कॉल किया जाता है, तो आदेश हैंडलर को यह जानने का कोई तरीका नहीं है कि कमांड के भीतर बुलाए गए ऑपरेशन केवल पढ़ने के लिए, पढ़/लिखने या संयोजन दोनों के।
मुझे समझ में नहीं आता कि इस उदाहरण में प्रचार कैसे काम करता है। अगर मुझे handle()
विधि readOnly=true
बनाना था, तो क्या होता है यदि आदेश तब सेवा परत विधि को कॉल करता है जो @Transactional(realOnly=false)
के साथ एनोटेट किया गया है?
मैं इस का एक बेहतर समझ की सराहना करते हैं और अपनी टिप्पणी का स्वागत करते हैं चाहता हूँ ...
एंड्रयू
तो दोनों विरोधाभासी जवाब में से जो सच है? क्या किसी ने जांच करने के लिए परेशान किया है? – LuGo
चूंकि 'हैंडल() '_may_ कॉल विधियां जो लिखती हैं, लेनदेन को लिखने की अनुमति देनी चाहिए। यह एक समाधान के रूप में ठीक और सही होगा। यदि आप वास्तव में चाहते थे, तो आप टेक्सास को प्रोग्रामेटिक रूप से शुरू करने और केवल पढ़ने के लिए स्विचिंग की जांच कर सकते हैं - शायद कमांड की विशेषता के माध्यम से - लेकिन मुझे गंभीरता से संदेह है कि यह प्रयास के लायक है। –