2012-01-24 10 views
8

उपयोग करने के लिए सही तरीका है। लेनदेन शुरू करने के लिए यहां भ्रमित, चाहे वह सेवा परत या डीएओ परत में हो?मुझे अपने डीएओ कक्षाओं के लिए <code>Hibernatedaosupport</code> साथ वसंत MVC का उपयोग कर रहा डीएओ में हाइबरनेट साथ वसंत MVC, सेवा परत वास्तुकला

मेरा दृश्य सेवा परत के साथ इंटरैक्ट करता है। डीएओ को सेवाओं में इंजेक्शन दिया जाता है।

डीएओ, सेवा परत वास्तुकला में हाइबरनेट साथ वसंत MVC उपयोग करने का अधिकार तरीका क्या है?

+0

यू मुझे स्पष्ट रूप से व्याख्या कर सकते हैं ... –

+0

@JustinThomas कि उपयोगी है, लेकिन अलग तरह है। –

उत्तर

20

आईएमएचओ लेनदेन सेवा परत पर जाना चाहिए। आम तौर पर एक व्यापार लेनदेन में कई प्रश्न और अद्यतन होते हैं। यदि आप केवल डीएओ परत पर @Transactional डालते हैं, तो प्रत्येक क्वेरी और अपडेट एक अलग लेनदेन में चलाया जाएगा, जो प्रभावी ढंग से लेनदेन के उद्देश्य को हरा देता है।

लेकिन अगर सेवाओं @Transactional हैं, प्रत्येक डेटाबेस संपर्क एक मुख्य लेन-देन शुरू हुई जब वेब परत सेवा परत में प्रवेश किया मिलती है। ध्यान दें कि इस मामले में यदि वेब परत कई सेवा विधियों को चलाती है, तो उनमें से प्रत्येक एक अलग लेनदेन में भाग लेगा (एक ही समस्या एक स्तर ऊपर स्थानांतरित)। लेकिन वेब परत में @Transactional रखकर एन + 1 समस्या जैसे अप्रत्याशित दुष्प्रभावों को पेश किया जा सकता है, जो अन्यथा पकड़े गए होते। इस प्रकार वेब परत से बुलाए गए एक सेवा विधि में एक व्यापार लेनदेन रखने की कोशिश करें।

+0

grr मुझे इसे हराया .... + 1 – hvgotcodes

+0

इसी तरह, dagnabbit! –

+0

टॉमसज़ हमेशा मुझे धड़कता है ... +1 – aweigold

0

स्पष्ट रूप से डीएओ परत। डेटा एक्सेस लेयर से कनेक्ट होने वाली कुछ भी डीएओ परत में होनी चाहिए और (अधिमानतः) @ रिपोजिटरी के साथ एनोटेटेड होनी चाहिए और आपकी सेवा (@Service के साथ एनोटेटेड) में डीएओ इंस्टेंस के लिए एक हैंडल होना चाहिए।

एक सेवा एकाधिक डीएओ को कॉल कर सकती है लेकिन दूसरी तरफ नहीं। डीएओ प्रकृति में परमाणु होना चाहिए।

यदि आप एक लेनदेन शुरू कर रहे हैं तो यह मेरी राय में सेवा परत में होना चाहिए जो मेरे पिछले बयान का समर्थन करता है जहां मैं डीएओ का उल्लेख प्रकृति में परमाणु होना चाहिए।

+0

लेकिन अगर मैं डीएओ परत में लेन-देन शुरू, मैं दो सत्रों अपवाद या कोई सत्र बाध्य ... सेवा परत में becoz खोला अगर मैं उन दो तरीकों विभिन्न सत्रों सही उपयोग कर रहे हैं दो तरीकों कॉल हो रही है .. तो यह कैसे हल करने के लिए .. –

+1

क्यों? इसके लिए एक से अधिक डीएओ के माध्यम से जाने वाली किसी भी चीज के लिए नेस्टेड लेनदेन की आवश्यकता होगी। –

+0

नकारात्मक ghostrider, @tomasz उत्तर सही है ... – hvgotcodes

0

सेवा परतों, डीएओ परत, संस्थाओं और नियंत्रकों के लिए एक पूरी जानकारी है। इसमें प्रत्येक मॉड्यूल के लिए संक्षिप्त वर्णन के साथ पूर्ण ट्यूटोरियल है।

साइट: Spring MVC With Hibernate CRUD

या आप पर जा सकते हैं यूट्यूब चैनल: Spring MVC with Hibernate CRUD VIDEO