hibernate 并没有创建foreign key 而是单纯做了索引

hibernate 配置如下:




        
    
        
            
        
        
        
            
            
        
    
    






        

    
        
    
    
        
        
    

    

运行后查看表:

mysql> show create table PersonAddress;
+---------------+----------------------------------
---------------------------------------------------
---------------------------------------------------
---------------------------------------------------
| Table         | Create Table

+---------------+----------------------------------
---------------------------------------------------
---------------------------------------------------
---------------------------------------------------
| PersonAddress | CREATE TABLE `personaddress` (
  `addressId` int(11) NOT NULL,
  `personId` bigint(20) NOT NULL,
  PRIMARY KEY (`personId`,`addressId`),
  KEY `FKA81B4EBF34EDEFEE` (`personId`),
  KEY `FKA81B4EBF4E1D97BA` (`addressId`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+---------------+----------------------------------
---------------------------------------------------

经过一天多的反复研究,发现是ENGINE=MyISAM的问题。

原因:

关联的两个表中,一个或者两个表是MyISAM引擎的表。若想要使用外键约束,表必须是InnoDB引擎(实际上,如果两个表都是MyISAM 引擎的,这个错误根本不会发生,但也不会产生外键,只会建立索引)你需要检查表的引擎类型。

具体的几种不能生成外键的原因可以看一下:http://blog.csdn.net/wangpeng047/article/details/19624351

查看数据库默认的引擎:

--查看当前数据库支持的引擎列表
show engines;

--查看当前的默认引擎
show variables like '%storage_engine%';

--修改表引擎,这里不需要用到
alter table table_name engine=innodb;  
hibernate 并没有创建foreign key 而是单纯做了索引_第1张图片
image.png

这里手动修改是不现实的,配置hibernate.cfg.xml


        org.hibernate.dialect.MySQL5InnoDBDialect     

这里mysql5.0以上是org.hibernate.dialect.MySQL5InnoDBDialect,以下就去掉5

然后删库,重新自动生成:

---------------------------------------------------------------+
| personaddress | CREATE TABLE `personaddress` (
  `addressId` int(11) NOT NULL,
  `personId` bigint(20) NOT NULL,
  PRIMARY KEY (`personId`,`addressId`),
  KEY `FKA81B4EBF34EDEFEE` (`personId`),
  KEY `FKA81B4EBF4E1D97BA` (`addressId`),
  CONSTRAINT `FKA81B4EBF34EDEFEE` FOREIGN KEY (`personId`) REFERENCES `person` (
`personId`),
  CONSTRAINT `FKA81B4EBF4E1D97BA` FOREIGN KEY (`addressId`) REFERENCES `address`
 (`addressId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+---------------+---------------------------------------------------------------

完成

你可能感兴趣的:(hibernate 并没有创建foreign key 而是单纯做了索引)