我试图在两个表之间创建外键约束,但是在执行alter命令后,mysql创建索引而不是外键。
我正在使用休眠模式,因此起初我以为这是休眠模式的问题,但是当我直接对mysql行为执行查询时,是相同的。
变更表人员添加约束FK9ircw28d19mdg5pu8yfg1qs8p外键(Address_Id)引用地址(Address_Id)
运行此命令后,我在mysql数据库中得到关注
如您所见,约束是在索引中添加的,而不是作为外键添加的。
Hibernate在创建表时执行以下查询:
休眠:删除表(如果存在)地址
Hibernate:如果存在hibernate_sequence,则删除表
休眠:如果存在人员,则删除表
休眠:创建表地址(Address_Id bigint不为null,addressLine1 varchar(255),addressLine2 varchar(255),city varchar(255)不为null,country varchar(255)不为null,state varchar(255)不为null,主键(Address_Id))engine = MyISAM
休眠:创建表hibernate_sequence(next_val bigint)engine = MyISAM
休眠:插入hibernate_sequence值(1)
休眠:插入hibernate_sequence值(1)
休眠:创建表人(Person_Id bigint不为null,dob日期不为null,名称varchar(255)不为null,Address_Id bigint,主键(Person_Id))engine = MyISAM
休眠:更改表人添加约束FK9ircw28d19mdg5pu8yfg1qs8p外键(Address_Id)引用地址(Address_Id)
答案 0 :(得分:0)
感谢@Solarflare。它解决了我的问题。问题是MyISAM引擎不支持外键。将引擎类型更改为InnoDB后,一切按预期进行。