Java r2dbc 客户端执行 sql 并使用返回的 id 进行下一次执行

Java r2dbc client execute sql and use returned id for next execute

我将 r2dbc 客户端与 postgresql 一起使用,我想在一个事务中调用 2 个插入(使用第一个查询的 ID),例如:

      client.execute("INSERT INTO place(id,city) VALUES(:id, :city)")
    .bind("id", "nextval('place_id_seq')")
    .bind("city", place.getCity())
    .fetch().rowsUpdated())
    )
    .then(client.execute("INSERT INTO place_category VALUES (:place_id, :category_id);")
      .bind("place_id", <PREVIOUS_ID OF INSERT>)
      .bind("category_id", place.getCategoryId())
      .fetch().rowsUpdated())
    .then();

我不知道如何获取第一个插入的@Id

在第一个语句中,向 return id 字段添加一个额外的过滤器。

 .filter((statement, executeFunction) -> statement.returnGeneratedValues("id").execute())

查看我的示例Save and Query

并且有一个 JUnit test case 用于将它们连接在一起的演示。

顺便说一句:我在 Spring 5.3 中使用 DatabaseClient 来处理这些示例。