ทั้ง save() และ saveAndFlush() ใช้สำหรับบันทึก entity ทั้งคู่อยู่ใน Spring Data library save() อาจจะหรืออาจไม่เขียนการเปลี่ยนแปลงไปยังฐานข้อมูลทันที ขึ้นอยู่กับการจัดการ transaction ในขณะที่ saveAndFlush() บังคับให้เกิดการซิงโครไนซ์สถานะโมเดลกับฐานข้อมูลทันที
ตารางเปรียบเทียบรายละเอียด
| ลำดับ | หัวข้อ | save() | saveAndFlush() |
|---|---|---|---|
| 1 | Repository | อยู่ใน CrudRepository | อยู่ใน JpaRepository |
| 2 | กลยุทธ์การ Flush | ไม่ flush ข้อมูลไปยัง DB โดยตรง จนกว่าจะเรียก flush() และ commit() อย่างชัดเจน | flush ข้อมูลไปยัง DB โดยตรงทันที |
| 3 | Bulk Save | CrudRepository มีเมธอด bulk save | saveAndFlush() ไม่รองรับ bulk operation |
| 4 | การมองเห็นข้อมูลหลังบันทึก | ไม่ flush โดยตรง การเปลี่ยนแปลงไม่มองเห็นนอก transaction เว้นแต่จะเรียก commit() | การเปลี่ยนแปลงมองเห็นได้นอก transaction ด้วย |
| 5 | กรณีการใช้งาน (Use Case) | ใช้เมื่อไม่ต้องใช้ข้อมูลที่บันทึกในภายหลังใน transaction เดียวกัน | ใช้เมื่อต้องใช้ข้อมูลที่บันทึกในภายหลังใน transaction เดียวกัน |
สรุป
save() เหมาะสำหรับการบันทึกทั่วไปที่ไม่ต้องการข้อมูลทันที ประหยัดประสิทธิภาพด้วยการ batch processing ในขณะที่ saveAndFlush() จำเป็นเมื่อต้องการข้อมูลที่เพิ่งบันทึกทันที เช่น เพื่อดึง ID ที่ generate จาก database หรือทำงานต่อใน transaction เดียวกัน