【问题标题】:Insert in DB for multiple records not working in webflux R2DBC在 DB 中插入多个记录在 webflux R2DBC 中不起作用
【发布时间】:2022-12-11 17:03:21
【问题描述】:

我试图一次性在数据库中插入一些记录,也尝试过循环,但它从未发生过,如果我保存一条记录,它就可以工作

@RequiredArgsConstructor
@Service
public class UserServiceImpl  {

    private final UserRepository userRepo;

    private final FamilyRepository familyRepo;

    public Mono<ServerResponse> insertUserData(ServerRequest serverRequest) {
        return serverRequest.bodyToMono(UserAndFamilyRequest.class)
//                .map(userAndFamilyRequest -> {
//                    List<FamilyMember> list = userAndFamilyRequest.getFamilyMemberList();
//                    list.stream().forEach((familyMember) ->
//                            {
//                                System.out.println(familyMember.getName());
//                                FamilyMemberEntity familyMemberEntity =  new FamilyMemberEntity();
//                                familyMemberEntity.setAge(familyMember.getAge());
//                                familyMemberEntity.setName(familyMember.getName());
//                                familyRepo.save(familyMemberEntity);//doesn't work either
//                                try{
//                                    Thread.sleep(2000);
//                                }catch(Exception ex){
//
//                                }
//
//                            });
//                    return userAndFamilyRequest;
//                })
                .map(userAndFamilyRequest -> {
                    List<FamilyMember> list = userAndFamilyRequest.getFamilyMemberList();
                    var entityList = list.stream().map(familyMember -> {
                        FamilyMemberEntity familyMemberEntity = new FamilyMemberEntity();
                        familyMemberEntity.setName(familyMember.getName());
                        familyMemberEntity.setAge(familyMember.getAge());
                        return familyMemberEntity;
                    }).collect(Collectors.toList());
                    familyRepo.saveAll(entityList);//doesn't work
                    return userAndFamilyRequest;
                })
                .flatMap(userAndFamilyRequest -> {
                    UserEntity userEntity = new UserEntity();
                    User user = userAndFamilyRequest.getUser();
                    userEntity.setSeats(userAndFamilyRequest.getFamilyMemberList().size());
                    userEntity.setAge(user.getAge());
                    userEntity.setName(user.getName());
                    return userRepo.save(userEntity);
                })
//                .flatMap(userAndFamilyRequest -> {
//                    FamilyMember familyMember = userAndFamilyRequest.getFamilyMemberList().get(0);
//                    FamilyMemberEntity familyMemberEntity =  new FamilyMemberEntity();
//                    familyMemberEntity.setAge(familyMember.getAge());
//                    familyMemberEntity.setName(familyMember.getName());
//                    return familyRepo.save(familyMemberEntity);//single save works
//                })
                .flatMap(userEntity -> ServerResponse.created(URI.create("users"+userEntity.getId()))
                        .contentType(MediaType.APPLICATION_JSON)
                        .bodyValue(userEntity));
    }


}

控制台没有错误

【问题讨论】:

    标签: spring-boot repository spring-webflux r2dbc


    【解决方案1】:

    在保存数据的函数中添加 try {} catch,这样你就可以知道你遇到了什么错误

    【讨论】:

      【解决方案2】:

      好吧,我自己找到了答案,地图中的 familyRepo.save 不会自行工作,因为它返回一个仅在订阅时才会执行的 Flux,将其替换为 flatMap(自动订阅)解决了这个问题。

      【讨论】:

        猜你喜欢
        • 2021-08-29
        • 2018-02-28
        • 1970-01-01
        • 1970-01-01
        • 2020-10-12
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-26
        相关资源
        最近更新 更多