Masivo e Historia
Distingue entre el comportamiento de guardado general que aplica el ciclo de vida de guardado y la inserción/upsert masiva, respaldo de eliminación, instantánea de historial.
guardar / saveAll
save(entity)
Si no hay id, se usa insertOne, si hay id, se usa replaceOne(..., upsert=true) basado en _id.
saveAll(...)
Se realiza save() para cada entidad, por lo que se aplican los hooks de ciclo de vida beforePersist/afterPersist.
Selección de API masiva
saveAllBulk
Inserción masiva basada en insertMany. No es una API para actualizar ids existentes.
saveAllBulkUpsert
Si la entidad no tiene id, se inserta; si tiene, se realiza un filtro _id + $set + upsert.
saveAllBulkUpsertByKey
Se realiza upsert basado en la clave compuesta del negocio. Si falta alguna clave, la entidad se trata como una inserción.
Eliminar entidad y eliminar copia de seguridad
backup을 활성화하면 <sourceCollection>_remove collection을 사용합니다. delete와 backup을 하나의 원자 작업으로 묶어야 한다면 호출 측에서 getTxJob(...) transaction 범위를 잡습니다.
Instantánea de historial
createHistory는 현재 MongoExecutionContext.write(...) 결과를 deep copy하고 _id를 제거한 뒤 <sourceCollection>_history 또는 지정한 prefix collection에 insert합니다. history write도 save lifecycle hook을 호출하지 않습니다.