当我尝试执行我的 Spring Boot 项目时,我在标题上收到错误消息。这是一个 MySQL 错误,我知道,但我不想在 MySQL 开发中处理创建和更改表的问题。这是在我的项目中执行的 MySQL 命令:
alter table password_reset_token add constraint FK5lwtbncug84d4ero33v3cfxvl foreign key (user_id) references user (id);
我有 USER 类和表;
@Entity
@Table(name="USER")
public class User{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String email;
//Getters and Setters
}
我有一个实体;
@Entity
public class PasswordResetToken{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String token;
private User user;
@OneToOne
@JoinColumn(name="user_id")
public User getUser(){
return user;
}
//And other Getters and Setters
}
我哪里做错了?当我查看自动生成的表(password_reset_token)时,我没有看到任何外键,当我运行命令时,我在 MySQL 开发端得到了相同的错误。
有很多“无法添加外键约束”的帖子,但在我的案例中,没有一个帖子解决了这个问题。
最佳答案
我找到了问题的原因。这是由于主键、外键的数据类型不匹配造成的。
我创建了“User”表并用 INT 声明了其主键。在 User 类中,我声明了 'id' Long。 JPA 期望获得“BIGINT”外键,但实际上它的类型是“INT”。这就是为什么,它给了我错误。我将类型更改为 BIGINT,现在它可以工作了。
关于mysql - Spring Data JPA 上的 "Cannot add foreign key constraint",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49452929/