我遇到了Hibernate和外键的以下问题:
当我第一次部署我的Web应用程序时,Hibernate配置了这些参数(以及许多其他参数):
databasePlatform
设置为“通用”(非特定引擎)方言org.hibernate.dialect.MySQLDialect
。hibernate.hbm2ddl.auto
设置为update
由于默认引擎为MyISAM
,Hibernate逻辑创建带有索引的MyISAM
表,忽略创建外键(因为MyISAM
不支持此类约束)。
既然我想将每个表迁移到InnoDB
,我希望Hibernate能够自动创建丢失的外键。不幸的是,看起来Hibernate只是在寻找索引:
由于我不想删除模式中的每个索引,您是否知道一种方法来告诉Hibernate创建外键,即使索引已创建?
谢谢。
答案 0 :(得分:0)
我的建议是允许hibernate重新创建整个模式,因为这是你的开发数据库。
但是,如果你有很多测试数据你不想丢失那么我会使用可用的MySQL命令创建一个脚本来自动删除所有的Hibernate索引来重新创建它们。您需要的命令是:
show tables;
show index from `table_name`;
drop index `index_name` on `table_name`;
将这些组织成某种形式的程序脚本(shell,python或你的建筑等应用程序),你就可以了。