Save और saveAndFlush दोनों एंटिटीज को सेव करने के लिए उपयोग किए जा सकते हैं। वे दोनों स्प्रिंग डेटा लाइब्रेरी से संबंधित हैं। save आपके परिवर्तनों को सीधे DB में लिख भी सकता है और नहीं भी। जब हम saveAndFlush को कॉल करते हैं तो सिस्टम आपके मॉडल स्टेट के साथ DB के सिंक्रोनाइजेशन को लागू करता है।
| क्र.सं. | मुख्य बिंदु | Save | SaveAndFlush |
|---|---|---|---|
| 1 | रिपॉजिटरी | यह CrudRepository से संबंधित है | यह JpaRepository से संबंधित है |
| 2 | डेटा फ्लश स्ट्रेटेजी | यह डेटा को सीधे डेटाबेस में फ्लश नहीं करता जब तक कि हम एक्सप्लिसिटली flush और commit मेथड न कॉल करें | यह डेटा को सीधे डेटाबेस में फ्लश करता है |
| 3 | बल्क सेव | CrudRepository बल्क सेव मेथड प्रदान करता है | saveAndFlush मेथड बल्क ऑपरेशन को सपोर्ट नहीं करता |
| 4 | सेव करने के बाद डेटा विजिबिलिटी | यह डेटा को सीधे डेटाबेस में फ्लश नहीं करता, इसलिए परिवर्तन ट्रांजैक्शन के बाहर तब तक विजिबल नहीं होंगे जब तक हम इसी ट्रांजैक्शन में एक्सप्लिसिटली commit() न कॉल करें | परिवर्तन ट्रांजैक्शन के बाहर भी विजिबल होंगे |
| 5 | यूज केस | हम इस मेथड का उपयोग तब करते हैं जब हमें उसी ट्रांजैक्शन में बाद में सेव किए गए परिवर्तनों का उपयोग करने की आवश्यकता नहीं होती | हम इस मेथड का उपयोग तब करते हैं जब हमें उसी ट्रांजैक्शन में बाद में सेव किए गए परिवर्तनों का उपयोग करने की आवश्यकता होती है |
तकनीकी विवरण
- save(): EntityManager.persist() या merge() को कॉल करता है, फ्लश बाद में होता है (ट्रांजैक्शन कमिट पर या मैन्युअल फ्लश पर)
- saveAndFlush(): save() के बाद तुरंत EntityManager.flush() कॉल करता है, जिससे SQL तुरंत एक्जीक्यूट होता है
कब किसका उपयोग करें?
- save(): बैच ऑपरेशन्स, परफॉरमेंस क्रिटिकल ऑपरेशन्स, जब तत्काल DB सिंक की आवश्यकता न हो
- saveAndFlush(): जब तुरंत ID जनरेशन चाहिए (उदाहरण: ऑटो-जनरेटेड ID), ट्रांजैक्शन के भीतर अन्य क्वेरीज को डेटा विजिबल करना हो, ऑप्टिमिस्टिक लॉकिंग वेरिफिकेशन
नोट
saveAndFlush का अत्यधिक उपयोग परफॉरमेंस को प्रभावित कर सकता है क्योंकि यह हर कॉल पर डेटाबेस राउंड-ट्रिप को बाध्य करता है।