Клиент Java r2dbc выполняет sql и использует возвращенный идентификатор для следующего выполнения

Я использую клиент r2dbc с postgresql, и я хотел бы вызвать в одной транзакции 2 вставки (используйте идентификатор первого запроса), например:

      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 первой вставки ‹PREVIOUS_ID OF INSERT›


person user1089362    schedule 15.10.2020    source источник


Ответы (1)


В первом операторе добавьте дополнительный фильтр для возврата полей идентификатора.

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

Посмотрите мой пример Сохранить и Запрос.

И есть тестовый пример JUnit для демонстрации их соединения.

Кстати: я использовал DatabaseClient в Spring 5.3 для этих образцов.

person Hantsy    schedule 18.10.2020