首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待多个语句使用R2DBC执行

等待多个语句使用R2DBC执行
EN

Stack Overflow用户
提问于 2022-02-10 10:32:01
回答 1查看 684关注 0票数 1

我需要用R2DBC执行多条语句,但是找不到有用的R2DBC示例.所以我的功能总是太早了:

代码语言:javascript
复制
public Publisher<Person> groupStatements(DatabaseClient client, Person person) {
// yes, I know that's harsh, but hey! so is JPA's @ElementCollection
return client.sql("DELETE FROM persons_address WHERE person = :id")
    .bind("id", person.getId())
    .fetch().rowsUpdated()
    .map(deleted -> {
        // now recreate every relationship
        GenericExecuteSpec statement = client.sql("INSERT INTO persons_address (person, address) VALUES (:person, :address)");
        person.getOfficePlaces().forEach(address -> {
            statement
                .bind("person", person.getId()).bind("address", address.getId())
                .fetch().rowsUpdated()  // there we go AWOL
                .subscribe(inserted -> {
                    // logging here
                });
        });
        return person;  //FIXME wait! need above grouped statements to complete
    });
}

注意:我使用H2作为后端。谢谢你提供的任何信息!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-10 16:35:53

我找到了一种合适的批处理技术(这里替换了map/删除部分),但是由于Statement#execute返回的发布者只有#订阅方法,所以我无法从链中返回。所以我给野兽喂食了几个齿轮

代码语言:javascript
复制
//DEBUG I couldn't figure out how to use labels! good enough
private static final String SQL_INSERT = "INSERT INTO persons_address (person, address) VALUES ($1, $2)";
...
.flatMap(deleted -> {
    if (person.getOfficePlaces().isEmpty()) {
        return Mono.just(person);
    } else {
        return client.inConnection(cnx -> {
            Statement stmt = cnx.createStatement(SQL_INSERT);
            person.getOfficePlaces().forEach(address -> {
                stmt.bind(0, person.getId()).bind(1, address.getId()).add();
            });
            return Flux.from(stmt.execute()).last().map(dontcare -> person);
        });
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71063534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档