为什么可以’;ti使用Spring数据Jdbc和xFF1F插入一个实体两次;
我的实体:为什么可以’;ti使用Spring数据Jdbc和xFF1F插入一个实体两次;,spring,insert,spring-data-jdbc,Spring,Insert,Spring Data Jdbc,我的实体: @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.passwo
@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);
}
如果我执行“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注释将ther字段映射到数据库列
@Column(name = "user_id")
private Long user_id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;
尝试将
@GeneratedValue(strategy=GenerationType.IDENTITY)
添加到您的用户id
。这会告诉Hibernate id是由数据库生成的。您已将数据库主键配置为自动增量列。再看看。他们有不同的用户名吗?您得到的堆栈跟踪是什么?旁注:我建议对名称坚持java约定,其中包括:属性和字段没有下划线。是的!它们有不同的名称。似乎我解决了它~只需添加@Column(“userId”)的注释spring jdbc似乎没有@GeneratedValue的注释。它是javax.persistence package的一部分我应该添加什么依赖性?似乎我解决了它~只是添加了@Column(“userId”)的注释。我很困惑,为什么我第一次可以插入一个。spring jdbc似乎没有@GeneratedValue的注释。它应该是spring数据包的一部分。我想你应该看看为什么不能使用注释。以您最喜欢的依赖关系分析器(IntellijMaven帮助器非常好)为例,查看Java持久性api的依赖关系树。它应该在spring数据下的某个地方。似乎我解决了它~只是添加了@Column(“userId”)的注释。我很困惑,为什么我第一次可以插入一个。我也有点困惑。这是不可能的。也许你会在某个时候手动设置你的id。没有exmaple是很难进一步研究的。这个注释不是Spring数据JDBC的一部分,你把它和Spring数据JPA或者实际上是JPA混淆了。
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long user_id;
@Column(name = "user_id")
private Long user_id;
@Column(name = "username")
private String username;
@Column(name = "password")
private String password;