mysql - Spring Data JPA 上的 "Cannot add foreign key constraint"

标签 mysql jpa spring-data-jpa

当我尝试执行我的 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/

相关文章:

mysql - SQL 查询在多列中查找具有相同值的行

php - 如何检查字符串是否包含子字符串 - mysql

java - Spring 无法使用 JPA 保存/更新实体

spring-boot - Spring Boot @Transaction(timeout = 1)

java - JPA:如何仅映射另一个实体的一个属性

php - 如何从 mysql 数据库中获取数据?

php - 带有 JQuery Droppable 的 MySQL 项目数据库

java - 如何在 Spring JPA for MySQL 中为 @Id @GeneratedValue 设置初始值?

java - Hibernate/JPA 中注释字段或 getter 方法之间的性能差异

java - spring jpa中根据实体从多个表中获取数据