当我尝试执行我的 Spring 引导项目时,我在标题上收到错误消息。我知道这是一个MySQL错误,但我不想处理创建和更改MySQL开发的表。这是我的项目中执行的 MySQL 命令:
alter table password_reset_token add constraint FK5lwtbncug84d4ero33v3cfxvl foreign key (user_id) references user (id);
我有用户类和表;
@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开发端收到相同的错误。
有许多"无法添加外键约束"的帖子,但在我的情况下,它们都没有解决这个问题。
我找到了问题的原因。这是由于主键、外键的数据类型不匹配。
我创建了"用户"表并使用 INT 声明了其主键。在 User 类中,我声明了 'id' Long。JPA 希望使用"BIGINT"获取外键,但其类型实际上是"INT"。这就是为什么,它给了我错误。我将类型更改为 BIGINT,现在它可以工作了。