问题描述
我的实体:
@Table("user")
public class User {
@Id
private Long user_id;
private String username;
private String password;
public User(String username,String password) {
this.username = username;
this.password = password;
}
public User() {
}
public Long getUser_id() {
return user_id;
}
public void setUser_id(Long user_id) {
this.user_id = user_id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getpassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
我的仓库:
public interface UserRepository extends CrudRepository<User,Long> {
@Query("select * from user where username = :username")
User findByUsername(@Param("username") String username);
}
CREATE TABLE `user` (
`user_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,`username` varchar(32) NOT NULL,`password` text NOT NULL,PRIMARY KEY (`user_id`),UNIQUE KEY `UINQUE_USERNAME`(`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
User userForRegister = new User(username,passwordEncoder.encode(password));
userRepository.save(userForRegister)
如果我执行'userRepository.save(userForRegister)'这行,我会第一次成功插入一个实体。
但是,如果我想插入另一个具有不同用户名的用户实体,则会出现错误:
2021-01-08 21:37:38.242 INFO 11180 --- [nio-8080-exec-8] c.k.centre.controller.UserController : Failed to execute DbAction.InsertRoot(entity=com.***.***.Entity.User@65bc9ea1,generatedId=null)
我可以插入它,直到我删除用户表的所有数据。 有没有我遗漏的地方?
解决方法
我认为 GenerateValue 可以解决问题
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long user_id;
另外我认为你应该使用@Column 注释将你的字段映射到数据库列
@Column(name = "user_id")
private Long user_id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
,
尝试将 @GeneratedValue(strategy = GenerationType.IDENTITY)
添加到您的 user_id
。这告诉 Hibernate id 是由您的数据库生成的。您将数据库主键配置为自动增量列。也看看here。