सभी डेटाबेस स्टेटमेंट को एक भौतिक लेनदेन के संदर्भ में निष्पादित किया जाता है, तब भी जब हम स्पष्ट रूप से लेन-देन की सीमाओं (BEGIN / COMMIT / ROLLBACK) की घोषणा नहीं करते हैं ।
यदि आप लेनदेन की सीमाओं को स्पष्ट रूप से घोषित नहीं करते हैं, तो प्रत्येक विवरण को एक अलग लेनदेन ( autocommitमोड) में निष्पादित करना होगा । यह तब तक प्रति कथन एक कनेक्शन को खोलने और बंद करने की ओर ले जा सकता है जब तक कि आपका वातावरण कनेक्शन-प्रति-थ्रेड बाइंडिंग से निपट नहीं सकता।
एक सेवा की घोषणा के रूप में @Transactionalआप पूरे लेनदेन की अवधि के लिए एक कनेक्शन दे देंगे, और सभी बयान उस एकल अलगाव कनेक्शन का उपयोग करेंगे। यह पहली जगह में स्पष्ट लेनदेन का उपयोग न करने से बेहतर है।
बड़े अनुप्रयोगों पर, आपके पास कई समवर्ती अनुरोध हो सकते हैं, और डेटाबेस कनेक्शन अधिग्रहण अनुरोध दर को कम करने से निश्चित रूप से आपके समग्र आवेदन प्रदर्शन में सुधार होगा।
जेपीए रीड ऑपरेशंस पर लेनदेन लागू नहीं करता है। यदि आप किसी लेन-देन के संदर्भ को शुरू करना भूल जाते हैं, तो केवल एक लेन-देन के अपवाद को फेंकना ही लिखते हैं। फिर भी, केवल-पढ़ने के लिए लेन-देन के लिए भी लेन-देन की सीमाओं की घोषणा करना हमेशा बेहतर होता है (वसंत में @Transactionalआपको रीड-ओनली लेनदेन को चिह्नित करने की अनुमति मिलती है, जिसमें बहुत अच्छा प्रदर्शन होता है)।