使用hibernate创建外键

时间:2013-01-03 10:51:02

标签: mysql hibernate innodb myisam dialect

我遇到了Hibernate和外键的以下问题:

当我第一次部署我的Web应用程序时,Hibernate配置了这些参数(以及许多其他参数):

  • databasePlatform设置为“通用”(非特定引擎)方言org.hibernate.dialect.MySQLDialect
  • hibernate.hbm2ddl.auto设置为update

由于默认引擎为MyISAM,Hibernate逻辑创建带有索引的MyISAM表,忽略创建外键(因为MyISAM不支持此类约束)。

既然我想将每个表迁移到InnoDB,我希望Hibernate能够自动创建丢失的外键。不幸的是,看起来Hibernate只是在寻找索引:

  • 如果索引存在,Hibernate将不会创建相应的外键;
  • 如果删除索引,Hibernate将同时创建索引和外键。

由于我不想删除模式中的每个索引,您是否知道一种方法来告诉Hibernate创建外键,即使索引已创建?

谢谢。

1 个答案:

答案 0 :(得分:0)

我的建议是允许hibernate重新创建整个模式,因为这是你的开发数据库。

但是,如果你有很多测试数据你不想丢失那么我会使用可用的MySQL命令创建一个脚本来自动删除所有的Hibernate索引来重新创建它们。您需要的命令是:

show tables;

show index from `table_name`;

drop index `index_name` on `table_name`;

将这些组织成某种形式的程序脚本(shell,python或你的建筑等应用程序),你就可以了。