gpt4 book ai didi

spring - 使用 Postgresql 使用 Spring Data R2DBC 保存对象时如何检索生成的 ID

转载 作者:行者123 更新时间:2023-12-05 03:01:44 25 4
gpt4 key购买 nike

你能帮我解决下面的问题吗

我有一个实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Id
private Long id;
private String name;
}

然后我用代码将它保存在 Postgresql 中:

public Mono<User> save(User user){
return databaseClient().inTransaction(db -> {
return db
.insert()
.into(User.class)
.using(user)
//todo: return saved user
});
}

我想得到保存的用户,我该怎么做

最佳答案

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>发出保存的(更新的)对象,其中包含生成的 ID。

一般来说,我们建议使用不可变对象(immutable对象)以避免可见性和共享可变状态问题。 Spring Data 利用 Lombok 的 @Wither当 Spring Data 需要将数据传播回对象时创建新对象实例的模式。

另见:

关于spring - 使用 Postgresql 使用 Spring Data R2DBC 保存对象时如何检索生成的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55594738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com