2013-10-31 11 views
9

नीचे अपने आवेदनस्प्रिंग डेटा जेपीए @transactional

नियंत्रक का प्रवाह है - सेवाएं - भंडार

सेवा परत हम @Transactional एनोटेशन है हम भी jpa:repository विन्यास जहाँ हम इकाई प्रबंधक और TXN निर्दिष्ट है प्रबंधक।

मेरा संदेह यह है कि मुझे लगता है कि jpa:repositories में निर्दिष्ट टीएक्सएन प्रबंधक माना जाता है और सेवा परत पर @Transactional निर्दिष्ट करने का कोई प्रभाव नहीं पड़ता है। उदाहरण के लिए: सेवा परत @Transactional कस्टम टीएक्सएन प्रबंधक को मैप किया जा सकता है, जहां सेवा द्वारा आवंटित भंडार में एक अलग टीएक्सएन प्रबंधक हो सकता है। उस स्थिति में यह कोई समस्या नहीं पैदा करेगा?

क्या कोई स्पष्ट कर सकता है कि जब हमें jpa भंडार का उपयोग कर रहे हैं तो हमें सेवा परत पर @Transactional डालने की आवश्यकता है?

+4

लेनदेन को डीएओ परत पर सीमांकित नहीं किया जाना चाहिए: काम की एक इकाई आमतौर पर कई डीएओ का उपयोग करेगी, और एक एकल लेनदेन सेवा विधि द्वारा ऑर्केस्ट्रेट किया जाएगा। आप केवल 2 एक ही लेनदेन प्रबंधकों को परिभाषित क्यों करेंगे? –

+0

हां ... क्योंकि जब आप एकाधिक डेटाबेस कॉल करते हैं तो आप एक लेनदेन नहीं चाहते हैं। इसलिए आपको सेवा स्तर पर शुरू होने वाले लेनदेन की आवश्यकता है। –

+0

सहमत हैं। वर्तमान कार्यान्वयन में एक डिजाइन मुद्दा है। यह सेवा दो अलग-अलग स्कीमा से जुड़े रिपोस्टोरियों को आमंत्रित करती है (ये शुद्ध चयन प्रश्न हैं और जेटीए नहीं हैं) यही कारण है कि जेपीए रिपोजिटरी को विभिन्न इकाई प्रबंधक कारखाने और विभिन्न टीएक्सएन प्रबंधक के साथ कॉन्फ़िगर किया गया है। – lives

उत्तर

18

देखें स्प्रिंग डाटा संदर्भ की धारा 2.3:

अपने भंडार पर

http://docs.spring.io/spring-data/jpa/docs/1.0.0.M1/reference/html/#transactions

CRUD तरीकों डिफ़ॉल्ट रूप से व्यवहार कर रहे हैं। के रूप में आवश्यक इन लेनदेनों विन्यस्त किया जा सकता है, यह सामान्य रूप से मामले, जैसा कि ऊपर टिप्पणी में सुझाव दिया है, कि लेन-देन सेवा परत में निर्दिष्ट किया जा और उस मामले में:

खजाने पर लेन-देन विन्यास उपेक्षित हो जाएगा तब बाहरी लेनदेन कॉन्फ़िगरेशन वास्तविकका उपयोग करता है।

तो, आपके प्रश्न के उत्तर में, लेनदेन किसी भी स्प्रिंग डेटा लेनदेन प्रबंधन के बावजूद सेवा स्तर पर निर्दिष्ट (और होना चाहिए) कर सकते हैं।

+0

धन्यवाद - यह एक बहुत ही उपयोगी जानकारी थी। मैं डीबग मोड में रीस्टेट करूँगा और ऊपर की पुष्टि करूँगा। – lives

+1

मैंने देखा कि रिपोजिटरी में लेनदेन इंटरसेप्टर सेवा परत द्वारा शुरू किए गए लेन-देन प्रबंधक का उपयोग नहीं करता है। रिपोजिटरी प्रॉक्सी के रूप में, "लेनदेन प्रबंधक" नाम से बीन की पहचान करने के लिए एक खोज की जाती है और इसका उपयोग किया जा रहा है। अगर हम वसंत जेपीए डेटा सेवा परत द्वारा शुरू किए गए लेनदेन का हिस्सा बनना चाहते हैं तो क्या कोई समझौता किया जाना है – lives

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