我想了解以下代码是否会使用单个事务更新批次。
BulkOperations bulkOps = mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, SomeEntity.class);
for (SomeVO SomeVO : SomeVOList) {
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(SomeVO.getId()));
Update update = new Update();
for (Field field : SomeVO.class.getDeclaredFields()) {
field.setAccessible(true);
Object value;
try {
value = field.get(SomeVO);
} catch (IllegalAccessException e) {
continue;
}
if (value != null && !field.getName().equals("id")) {
update.set(field.getName(), value);
}
}
bulkOps.updateOne(query, update);
}
BulkWriteResult result = bulkOps.execute();
只是想了解一下
bulkOps.execute()
以全有或全无的方式处理更新?当将 spring-data-mongo 与 cosmosDB 一起使用时
不,默认情况下,在将 Spring Data MongoDB 与 Cosmos DB 结合使用时,bulkOps.execute() 不会以全有或全无的方式处理更新。 bulkOps操作是单独执行的,如果一次更新失败,不会回滚之前成功的更新。这意味着您最终可能会得到部分更新,其中某些文档已更新,而其他文档则未更新。
要实现全有或全无(事务)行为,您需要在事务中执行批量操作。