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

问题描述

我将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

解决方法

在第一条语句中,添加一个额外的过滤器以返回id字段。

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

检查我的SaveQuery的示例。

还有一个JUnit test case用于演示如何将它们连接在一起。

顺便说一句:我在Spring 5.3中为这些示例使用了DatabaseClient。