我看了这个例子:
suspend fun save(user: User)=
client.insert().into<User>().table("users").using(user).await()
这很好。我想使用批量插入方法:
https://docs.spring.io/spring-data/r2dbc/docs/1.0.x/reference/html/#reference,第11.7.2节。插入数据
使用(Publisher)来接受要插入的对象流。
所以我尝试了:
client.insert().into<User>().table("users").using(Flux.fromIterable(user)).await()
但是什么也没做。为什么会这样,应该怎么写呢?
答案 0 :(得分:0)
我刚刚意识到,您没有包括fetch()方法来使DatabaseClient在using()方法之后插入对象。
client.insert()
.into<User>()
.table("users")
.using(Flux.fromIterable(user))
.fetch()
.await()
正如我在上面的评论中提到的那样,我的批处理插入仅在流中插入第一个对象。根据发布商的DatabaseClient.InsertSpec,在调用RowsFetchSpec.one()或RowsFetchSpec.first()时,提取操作仅插入单个对象。这导致我在fetch()方法之后添加.all()来获取要插入的所有对象,在您的情况下将是
client.insert()
.into<User>()
.table("users")
.using(Flux.fromIterable(user))
.fetch()
.all()
.await()
您的批处理插入与我的批处理插入之间的唯一其他区别是,我使用Java,并且使用了into(Class table)方法而不是into(String table),并在其中注释了@Table和@Id用户POJO。