Bulk & Sejarah
Membedakan perbedaan perilaku penyimpanan umum yang menerapkan siklus hidup penyimpanan dan bulk insert/upsert, cadangan penghapusan, snapshot riwayat.
save / saveAll
save(entity)
Jika tidak ada id, gunakan insertOne, jika ada id, gunakan _id sebagai dasar replaceOne(..., upsert=true).
saveAll(...)
Melakukan save() untuk setiap entitas sehingga hook siklus hidup beforePersist/afterPersist diterapkan.
Pemilihan API massal
saveAllBulk
Bulk insert berbasis insertMany. Ini bukan API untuk memperbarui id yang ada.
saveAllBulkUpsert
Jika id entitas tidak ada, lakukan insert, jika ada, lakukan filter _id + $set + upsert.
saveAllBulkUpsertByKey
Melakukan upsert berdasarkan kunci komposit bisnis. Jika salah satu kunci tidak ada, entitas tersebut diperlakukan sebagai insert.
Hapus entitas dan hapus cadangan
backup을 활성화하면 <sourceCollection>_remove collection을 사용합니다. delete와 backup을 하나의 원자 작업으로 묶어야 한다면 호출 측에서 getTxJob(...) transaction 범위를 잡습니다.
Snapshot riwayat
createHistory는 현재 MongoExecutionContext.write(...) 결과를 deep copy하고 _id를 제거한 뒤 <sourceCollection>_history 또는 지정한 prefix collection에 insert합니다. history write도 save lifecycle hook을 호출하지 않습니다.