【发布时间】:2021-02-21 01:11:35
【问题描述】:
让我们考虑这个函数
@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()
【问题讨论】:
-
我没有看到处理它的部分,你能详细说明吗?
-
条件插入函数首先尝试按 ID 获取实体,只有当具有该 ID 的实体不可用时,它才会插入该实体(switchIfEmpty{} 部分)
标签: kotlin spring-webflux spring-data-r2dbc r2dbc r2dbc-postgresql