能帮我解决以下问题吗?
我有一个实体类:
@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
});
}
我希望得到保存的用户,我该怎么做
答案 0 :(得分:1)
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的已保存(已更新)对象。通常,我们建议使用不可变的对象,以避免可见性和共享的可变状态问题。当Spring Data需要将数据传播回对象时,Spring Data利用Lombok的@Wither
模式创建一个新的对象实例。
另请参阅:
PostgresR2dbcRepositoryIntegrationTests