0

我在使用 Hibernate 和外键时遇到以下问题:

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

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

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

现在我想将每个表迁移到InnoDB,我希望 Hibernate 自动创建缺少的外键。不幸的是,Hibernate 似乎只是在寻找索引:

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

由于我不想删除架构中的每个索引,您是否知道即使创建了索引也可以告诉 Hibernate 创建外键的方法?

谢谢你。

4

1 回答 1

0

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

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

show tables;

show index from `table_name`;

drop index `index_name` on `table_name`;

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

于 2013-01-03T13:48:24.277 回答