实现Object Flux的Upsert功能



我有一个包含对象的流量请求。任务是创建(如果不存在(或更新(如果存在(这些对象。我已经尝试实现如下:

requestFlux.flatMap(entry -> {
Mono<Optional<MyObject>> existingMapping = myRepository
.findByIdAndName(entry.getId(), entry.getName());
return existingMapping.map(optional -> {
if (optional.isPresent()) {
MyObject model = MyObjectMapper.updateMyObject(entry, optional.get()); 
myRepository.save(model);
return model;
} else {
MyObject model = MyObjectMapper.toMyObjectModel(entry);
myRepository.save(model);
return model;
}
});
});

由于某种原因,这似乎不起作用。它没有抛出任何错误,没有创建/更新记录,也没有记录if/else中存在的消息。想知道我错过了什么吗?

您必须将所有内容绑定到一个更改中。不要把链子弄断。

public Mono<ServerResponse> createOrUpdateBulkMapping(ServerRequest serverRequest) {
Flux<RequestObjects> requestFlux = serverRequest.bodyToFlux(RequestObjects.class);
List<MyObjects> createdList = new ArrayList<>();
List<MyObjects> updatedList = new ArrayList<>();
return requestFlux
.flatMap(entry -> {
return myRepository.findByIdAndName(entry.getId(),entry.getName())
.flatMap(optional -> {
updatedList.add(entry);
MyObject model = MyObjectMapper.updateMyObject(entry, optional.get());
return myRepository.save(model);
})
.switchIfEmpty(saveNewModel(entry, createdList));
})
.then(ServerResponse.ok().body(Mono.just("Bulk Create/Update is successful").log(), String.class));
}
private Mono<MyObject> saveNewModel (RequestObjects entry, List<MyObjects> createdList) {
createdList.add(entry);
MyObject model = MyObjectMapper.toMyObjectModel(entry);
return myRepository.save(model);
}

编辑:作为您在此处提供的要点:https://gist.github.com/vkrmsngh43/13a8753848893a0f6988d8327f656220答案已更改

最新更新