未创建外键约束

mklgxw1f  于 2021-06-15  发布在  Mysql
关注(0)|答案(0)|浏览(175)

所以我使用mysql 8.0和hibernate 5.4.25,这是目前hibernate最稳定的版本,下面是我编写的创建外键的代码

@Entity
@Table(name="Instructor")
public class Instructor {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="e_id")
    private int e_id;

    @Column(name="name")
    private String name;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "detail_id",referencedColumnName = "d_id", 
    foreignKey = @ForeignKey(name="fk_detail", value = ConstraintMode.PROVIDER_DEFAULT))
    private InstructorDetails detail;
}

这是我的另一个实体类

@Entity
@Table(name="InstructorDetails")
public class InstructorDetails {

    @OneToOne(mappedBy = "detail",cascade = CascadeType.ALL)
    private Instructor instructor;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "d_id")
    private int d_id;

    @Column(name = "age")
    private int age;

    @Column(name = "branch")
    private String branch;

    @Column(name = "hobby")
    private String hobby;

    @Column(name = "dept")
    private String dept;
}

当然,我在实体类中有所有必需的setter、getter和constructor,我在这里没有包括它们,所以这个问题仍然很紧凑
这里的问题是我在我的hibernate配置文件中包含了show\u sql属性true,它向我显示了下面的ddl命令已经执行

create table Instructor (
       e_id integer not null auto_increment,
        name varchar(255),
        detail_id integer,
        primary key (e_id)
    ) engine=MyISAM

alter table Instructor 
       add constraint fk_detail 
       foreign key (detail_id) 
       references InstructorDetails (d_id)

这意味着根据这个ddl,已经创建了约束名为“fk\u detail”的外键,但是如果我打开mysql workbench并 checkout 创建表的ddl命令,那么下面的ddl就会显示出来

CREATE TABLE `instructor` (
  `e_id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `detail_id` int DEFAULT NULL,
  PRIMARY KEY (`e_id`),
  KEY `fk_detail` (`detail_id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

正如我们所看到的,创建了一个键“fk\u detail”,但它不是外键,因为缺少引用的表和列的详细信息,并且我看到了其他表的ddl,在这些情况下,在这些表中创建了外键约束,所有的详细信息都可用,而且detail\u id根本不像外键那样工作
那么如何解决这个问题,如何使用hibernate注解创建外键呢

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题