Bulk & Historique
Faites la distinction entre le comportement de la sauvegarde générale avec cycle de vie de sauvegarde et l'insertion/upsert en masse, la suppression de sauvegarde, l'instantané d'historique.
save / saveAll
save(entity)
S'il n'y a pas d'id, utilisez insertOne, s'il y a un id, utilisez replaceOne(..., upsert=true) basé sur _id.
saveAll(...)
Effectue save() pour chaque entité, donc le hook de cycle de vie beforePersist/afterPersist s'applique.
Choix de l'API Bulk
saveAllBulk
Insertion en masse basée sur insertMany. Ce n'est pas une API pour mettre à jour des id existants.
saveAllBulkUpsert
S'il n'y a pas d'id d'entité, effectuez une insertion, s'il y en a un, effectuez un filtre _id + $set + upsert.
saveAllBulkUpsertByKey
Effectue un upsert basé sur la clé composite de l'entreprise. Si l'une des clés est manquante, l'entité est traitée comme une insertion.
Suppression d'entité et suppression de sauvegarde
backup을 활성화하면 <sourceCollection>_remove collection을 사용합니다. delete와 backup을 하나의 원자 작업으로 묶어야 한다면 호출 측에서 getTxJob(...) transaction 범위를 잡습니다.
Instantané d'historique
createHistory는 현재 MongoExecutionContext.write(...) 결과를 deep copy하고 _id를 제거한 뒤 <sourceCollection>_history 또는 지정한 prefix collection에 insert합니다. history write도 save lifecycle hook을 호출하지 않습니다.