Bulk & Verlauf

Unterscheidet zwischen allgemeinem Speichern mit angewendetem Speichersystem und Bulk-Insert/Upsert, Entfernen von Backups, Verhaltensunterschieden bei History-Snapshots.


save / saveAll

save(entity)

Wenn keine ID vorhanden ist, verwenden Sie insertOne, wenn eine ID vorhanden ist, verwenden Sie _id als Grundlage für replaceOne(..., upsert=true).

saveAll(...)

Da für jede Entity save() aufgerufen wird, wird der Lebenszyklus-Hook beforePersist/afterPersist angewendet.

Auswahl der Bulk-API

saveAllBulk

Bulk-Insert basierend auf insertMany. Es ist keine API zum Aktualisieren vorhandener IDs.

saveAllBulkUpsert

Wenn die Entity-ID nicht vorhanden ist, wird ein Insert durchgeführt, wenn sie vorhanden ist, wird _id Filter + $set + Upsert ausgeführt.

saveAllBulkUpsertByKey

Upsert basierend auf dem Geschäftskomplexschlüssel. Wenn einer der Schlüssel fehlt, wird die entsprechende Entity als Insert behandelt.

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

Entity löschen und Backup entfernen

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 범위를 잡습니다.

Historischer Snapshot

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. Alle Rechte vorbehalten.EinführungDatenschutzrichtlinie