gpt4 book ai didi

java - Spring 更新而不是保存

转载 作者:行者123 更新时间:2023-12-05 06:11:22 25 4
gpt4 key购买 nike

我正在尝试使用 R2DBC 编写一些响应式(Reactive)后端代码,但遇到了一个我不太了解的问题。我不知道为什么,但 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;
}

我的 Controller :

@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”:“重新”,“用户名”:“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 接口(interface),它必须实现 isNew() 方法,该方法定义了 repository.save() 的行为 - 它会触发 INSERT 还是 UPDATE

我看到在你的情况下你没有实现 Persistable也许那么默认行为是

boolean isNew() { return id == null; }

在您的情况下,这可能意味着该实体被 Spring 数据 r2dbc 视为不是新实体,这就是它进行 UPDATE 的原因。

但这只是我的猜测。

关于java - Spring 更新而不是保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64030718/

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