Spring Data R2DBC ожидает, что ваша база данных возвратит сгенерированные ключи. При использовании Postgres убедитесь, что объявлен столбец, который сам генерирует Id, например SERIAL
.
В вашем случае это будет:
CREATE TABLE user (
id serial CONSTRAINT id PRIMARY KEY,
name varchar(255) NOT NULL,
);
В зависимости от того, какой API вы используете, вы можете получить Id различными способами:
DatabaseClient
: операция INSERT
возвращает сгенерированные значения как Map<String, Object>
путем сопоставления имен столбцов со значениями. Вам нужно извлечь Id самостоятельно.
- Использование
R2dbcRepository
: при сохранении нового объекта возвращается Mono<T>
, который испускает сохраненный (обновленный) объект, который содержит сгенерированный идентификатор.
В общем, мы рекомендуем неизменяемые объекты, чтобы избежать проблем с видимостью и общими изменяющимися состояниями. Spring Data использует шаблон @Wither
Lombok для создания нового экземпляра объекта, когда Spring Data необходимо распространить данные обратно на объект.
Смотри также: