当前位置: 首页 > 知识库问答 >
问题:

新实体的多个条件插入导致R2DBC中出现重复条目错误

华锦程
2023-03-14

让我们考虑一下这个函数

@Transactional
fun conditionalInsertEntity(dbEntity: DBEntity): Mono<DBEntity> {
    return fetchObjectByPublicId(dbEntity.publicId)
        .switchIfEmpty {
            r2DatabaseClient.insert()
                .into(DBEntity::class.java)
                .using(Flux.just(dbEntity))
                .fetch()
                .one()
                .map { it["entity_id"] as Long }
                .flatMap { fetchObjectById(it) }
        }
}

使用以下驱动程序代码运行上述函数时,如果列表中包含重复项,则会出现重复项错误。理想情况下,它不应该给出该错误,因为上面的函数已经在处理重复插入的情况!!

val result = Flux.fromIterable(listOf(dbEntity1, dbEntity1, dbEntity2))
    .flatMap { conditionalInsertEntity(it) }
    .collectList()
    .block()

共有1个答案

严远
2023-03-14

意识到这是使用flatMap而不是concatMap的问题。与flatMap不同,ConcatMap按顺序从各个发布者收集结果。(此处有更多信息)

因为我使用了flatMap,多个发布者认为该实体在DB中不可用

 类似资料:
  • 我有一个数据帧,我想删除a列等于蓝色,B列等于绿色的所有行。 我认为下面的应该工作,但事实并非如此。 有人看到问题了吗

  • 我希望能够复制Jhipster中某个实体的现有条目。举个例子:jhipster条目 但我不知道从哪里开始,如何开始。 编辑:我是初学者。我必须在后端和前端进行更改,但我的问题是关于后端的。

  • 问题内容: 我有一个喜欢的表,其中包含一些字段,例如login_id,driver_id(一个login_id可能有很多driver_id)。然后我正在使用批量更新,没有检查表中是否存在driver_id。 输入数据将是驱动程序ID的集合,如果相关的login_id已经存在相同的ID,则需要跳过驱动程序ID的插入。因此,将插入新的ID,而不会插入其他ID 我可以用mysql做些什么,表中需要做哪些

  • null 有人也遇到这个问题吗?如果是这样,有人能帮我吗(我已经在这个问题上破了2天了!)?谢了!

  • 我想用几天时间解决一个问题 当我运行应用程序时,出现以下错误: 更详细地说(这里它说:simple-xml-2.7.1.jar,但我有一个类似于图中的simple-cxml-2.3.4.jar) 关联的ProGuard文件为空。 图书馆在哪里(我正在使用外部图书馆) 我的项目版本: 我的模块:android-ngn-stack build.gradle 我的模块:应用程序构建。我认为有问题的地方