Spring R2DBC:如果 id 为零,则保存新实体

Spring R2DBC: Save new entity if id is zero

我正在从传统的 JPA 代码库迁移并面临无法通过将 id 设置为零来保存新实体的问题。

这是我的架构 (PostreSQL):

CREATE TABLE my_user (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);

在 JPA 中,我可以将 id 设置为 0,它将被视为一个新实体。将自动分配一个新 ID。 但是在 R2DBC 中,新实体总是以 id = 0 保存,这是不可能的。

我知道,我可以为此使用 IntegerLong 并将它们设置为 null,但我使用的是 Kotlin 并希望使 id 不可为空.否则我必须做大量不必要的空检查。

userRepo.save(User(0, "A New User")) // works
userRepo.save(User(0, "Another New User")) // error, same id (but works in JPA)
@Table("my_user")
data class User(@Id var id: Int = 0,
                var name: String = "")

看来这个问题会在 Spring Boot 2.4

中修复

https://github.com/spring-projects/spring-data-r2dbc/issues/402