java - Spring 更新而不是保存
问题描述
我正在尝试使用 R2DBC 编写一个小的反应式后端并遇到我不太了解的事情。我不知道为什么,但 Spring 正在尝试更新条目而不是将其保存到数据库中。
我的用户模型:
@Table("user")
@NoArgsConstructor
@Data
public class User {
@Id
private String id;
private String username;
private String password;
public User(String id,String username,String password){
this.id = id;
this.username = username;
this.password=password;
}
我的控制器:
@RestController
public class UserController {
` private final UserRepository userRepository`;
@Autowired
public UserController(UserRepository userRepository){
this.userRepository = userRepository;
}
@PostMapping("/create")
public Mono<User> createUser(@RequestBody User user){
return userRepository.save(user);
}
当我使用这样的输入向此端点发送 POST 请求时,例如:
{“id”:“re”,“用户名”:“ehmmidk”,“密码”:“dsadsadsadsa”}
即使我的数据库中没有条目,它也会更新保存。
我的架构如下所示:
CREATE TABLE user (
id VARCHAR(255) NOT NULL ,
username VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
PRIMARY KEY (id),
UNIQUE(username)
);
解决方案
原因可能是您发布了一个带有预填充的实体id
:
{ "id" : "re", "username" : "ehmmidk", "password" : "dsadsadsadsa" }
我发现如果一个声明的实体正在实现Persistable
接口,它必须实现isNew()
定义行为的方法repository.save()
——它会触发一个INSERT
还是一个UPDATE
.
我看到在你的情况下你没有实现Persistable
但也许默认行为是
boolean isNew() { return id == null; }
在您的情况下,这可能意味着该实体被 Spring 数据 r2dbc 视为不是新的,这就是它生成UPDATE
.
然而,这只是我的猜测。
推荐阅读
- apache-kafka-connect - 如何使用 apache-kaka 而不是 confluent 实现 kafka-connect
- rx-java - 一个 Observable 应该基于另一个 Observable 发射的项目发射项目,并且两个 Observable 都没有连接
- asp.net-core-2.1 - ef core中查询相关数据的问题
- sql-server - 如何查询父重复节点内的重复 XML 子节点?
- rest - Godaddy API 是否返回不良结果?
- vbscript - 这是一段代码,每分钟将文件夹中的所有 .csv 文件转换为 .xls。但我寻求一些帮助以避免重复
- ios - 在 Objective-C 中检查给定字符是否是表情符号
- android - 限制支持蓝牙 LE 广告的设备在 Play 商店中的 Android 应用
- php - 优化查询 - 如何选择最高和最低行,从日期时间列按日期分组并返回数组
- python - 具有 Softmax 输出层的二元分类 NN 预测不正确