如何解决Spring Boot-在失败的保存中某些东西会增加ID,为什么?
我试图通过编写简单的API来学习Spring Boot。我将用户实体定义为:
@Data
@Entity
@AllArgsConstructor
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false,unique = true)
private String login;
@Column(nullable = false)
private String password;
@Column(nullable = false,unique = true)
private String email;
及其CRUD存储库:
public interface UserRepository extends CrudRepository<User,Long> {
Optional<User> findByLogin(String name);
List<User> findAll();
}
可能值得注意的是,我目前在docker容器中使用mySQL数据库。无论如何,我已经尝试处理用户可能提出的无效请求(例如字段缺失/不正确和重复),并提出了以下方法来检查并返回适当的错误。
public User save(User user) {
User savedUser;
if(user.getEmail() == null || user.getLogin() == null || user.getPassword() == null)
throw new IncorrectBodyException(user.toString());
try {
savedUser = userRepository.save(user);
} catch (DataIntegrityViolationException e) {
throw new UserDuplicateEntryException(e.getLocalizedMessage());
}
return savedUser;
}
此方法效果很好,并且返回了正确的响应,但是它具有意外的错误(并且可能是错误的)。即使userRepository.save(user)
抛出异常(例如关于重复的异常),它也会不将该用户保存到数据库中,但是会将增加总体ID。也就是说,如果我添加第一个用户,则其ID将为1,然后如果我尝试添加其重复项3次,则 NEXT 正确的用户ID将为5。因此最终将有2个用户在数据库中,id = 1之一,id = 5之一。
为什么会这样?有什么不好的吗我本来可以处理的更好的方法呢?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。