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.

java
Mono<BulkWriteResult> result = dsl
    .executeEntity(Auction.class, MongoTemplateName.FRONT)
    .saveAllBulkUpsertByKey(
        auctions,
        "caseNo",
        "caseYear",
        "court"
    );

Suppression d'entité et suppression de sauvegarde

java
dsl.executeEntity(User.class, key).delete(user);
dsl.executeEntity(User.class, key).delete(user, true);
dsl.executeEntity(User.class, key).deleteBulk(users, true);

backup을 활성화하면 <sourceCollection>_remove collection을 사용합니다. delete와 backup을 하나의 원자 작업으로 묶어야 한다면 호출 측에서 getTxJob(...) transaction 범위를 잡습니다.

Instantané d'historique

java
dsl.executeEntity(User.class, key).createHistory(user);
dsl.executeEntity(User.class, key).createHistory(user, "snapshot");

createHistory는 현재 MongoExecutionContext.write(...) 결과를 deep copy하고 _id를 제거한 뒤 <sourceCollection>_history 또는 지정한 prefix collection에 insert합니다. history write도 save lifecycle hook을 호출하지 않습니다.

© 2026 Byeolnaerim. Tous droits réservés.PrésentationPolitique de confidentialité