save() এবং saveAndFlush() উভয়ই এন্টিটি সংরক্ষণের জন্য ব্যবহৃত হয়। উভয়ই Spring Data লাইব্রেরির। save() কল করলে পরিবর্তনগুলো ডেটাবেসে সোজা লেখা হয় না; saveAndFlush() কল করলে সিস্টেম আপনার মডেল স্টেটকে ডেটাবেসের সাথে সিঙ্ক্রোনাইজ করতে বাধ্য করে।
save() এবং saveAndFlush()-এর তুলনা
| ক্রমিক নং | বিষয় | save() | saveAndFlush() |
|---|---|---|---|
| ১ | রিপোজিটরি | CrudRepository-এ থাকে | JpaRepository-এ থাকে |
| ২ | ডেটা ফ্লাশ Страটেজি | এক্সপ্লিসিটলি flush() এবং commit() কল না করা পর্যন্ত ডেটাবেসে ফ্লাশ করে না | সোজা ডেটাবেসে ডেটা ফ্লাশ করে |
| ৩ | বাল্ক সেভ | CrudRepository বাল্ক সেভ মেথড প্রদান করে | saveAndFlush() বাল্ক অপারেশন সাপোর্ট করে না |
| ৪ | সেভ করার পর ডেটা দৃশ্যমানতা | ডেটাবেসে সরাসরি ফ্লাশ করে না, তাই ট্রানজ্যাকশনের বাইরে পরিবর্তন দৃশ্যমান হয় না (commit() কল না করা পর্যন্ত) | ট্রানজ্যাকশনের বাইরেও পরিবর্তন দৃশ্যমান হয় |
| ৫ | ইউজ কেস | সেম ট্রানজ্যাকশনে পরে সেভড পরিবর্তন ব্যবহার না করলে | সেম ট্রানজ্যাকশনে পরে সেভড পরিবর্তন ব্যবহার করলে |
প্রায়োগিক দিকনির্দেশনা
- সাধারণ CRUD অপারেশনের জন্য
save()ব্যবহার করুন - যদি সেভ করার সাথে সাথে ডেটাবেসে পরিবর্তন প্রতিফলিত করতে হয় (যেমন: অন্য ট্রানজ্যাকশন থেকে পড়তে হয়, আইডি জেনারেশন, কনস্ট্রেইন্ট ভ্যালিডেশন) তবে
saveAndFlush()ব্যবহার করুন - বাল্ক অপারেশনের জন্য
saveAll()ব্যবহার করুন - ট্রানজ্যাকশন ম্যানেজমেন্টের জন্য
@Transactionalঅ্যানোটেশন ব্যবহার করুন