首次启动api后,前3个用户创建的Post请求失败(帖子底部的屏幕截图),并出现以下错误(唯一约束迁移)。
后续请求有效,第一个创建的用户的ID为4,然后为5,以此类推...
如何使用户创建在前(3)次尝试中起作用?
我怀疑这与我的用户的预播有关,我正在使用以下脚本进行此操作。可能自动ID生成首先尝试1,2,3-已经使用了吗?
INSERT INTO user
VALUES (1, 'user1', 'pass1', 'ADMIN');
INSERT INTO user
VALUES (2, 'user2', 'pass2', 'USER');
INSERT INTO user
VALUES (3, 'user3', 'pass3', 'ADMIN')
无法执行语句; SQL [n / a];约束[\“ PRIMARY KEY ON PUBLIC.USER(ID)\“; SQL语句:\ n插入用户(名称,密码, 角色,id)值(?,?,?,?)[23505-196]];嵌套异常为 org.hibernate.exception.ConstraintViolationException:无法 执行语句”,
@RestController
public class UserResource {
@Autowired
private UserRepository userRepository;
@GetMapping("/users")
public List<User> retrievaAllUsers() {
return userRepository.findAll();
}
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
userRepository.deleteById(id);
}
@PostMapping("/users")
public ResponseEntity<Object> createUser(@RequestBody User user) {
User savedUser = userRepository.save(user);
URI location = ServletUriComponentsBuilder.fromCurrentRequest()
.path("/{id}")
.buildAndExpand(savedUser.getId())
.toUri();
return ResponseEntity.created(location).build();
}
}
-
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue
private Long id;
private String name;
private String password;
@Enumerated(EnumType.STRING)
private Role role;
public User() {
super();
}
public User(Long id, String name, String password, Role role) {
this.id = id;
this.name = name;
this.password = password;
this.role = role;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
}
编辑-添加了角色类
public enum Role {
USER, ADMIN
}
答案 0 :(得分:1)
如果您在列定义中使用了AUTO_INCREMENT,请尝试将策略从IconButton(
iconSize: 30.0,
onPressed: () => _showDialog(context),
icon: Icon(
Icons.clear,
color: Colors.white,
),
更改为GenerationType.AUTO
。
当我将项目从Spring Boot 1.5升级到2.0时,我注意到了类似的行为。
答案 1 :(得分:1)
只是一个假设。首先,您要使用sql插入数据,但是在代码中,您将创建新用户并将其保存到db。因此,此新创建的ID为public class Test1 {
public static void main(String[] args) {
System.out.println("Class 1");
Test2.main(args);
Test3.main(args);
}
}
...
public class Test2 {
public static void main(String[] args) {
System.out.println("Class 2");
}
}
...
public class Test3 {
public static void main(String[] args) {
System.out.println("Class 3");
}
}
。但是您的数据库有一条用户记录,该记录的主键为1
。请从db中删除所有值,并从rest控制器创建记录。
在我看来,请使用这样的序列,不要忘记在db中创建序列;
1
或者阅读此书,然后选择要解决的问题。
PS:身份应该更相关,但请尝试其他人。
答案 2 :(得分:1)
INSERT INTO用户(ID,名称,密码,角色) 值(1,'user1','pass1','ADMIN');
INSERT INTO用户(ID,名称,密码,角色) 值(2,“ user2”,“ pass2”,“ USER”);
INSERT INTO用户(ID,名称,密码,角色) 值(3,“ user3”,“ pass3”,“ ADMIN”)