【发布时间】:2013-01-03 10:51:02
【问题描述】:
我在使用 Hibernate 和外键时遇到以下问题:
当我第一次部署我的 Web 应用程序时,Hibernate 配置了以下参数(以及许多其他参数):
-
databasePlatform设置为“通用”(非引擎特定)方言org.hibernate.dialect.MySQLDialect。 -
hibernate.hbm2ddl.auto设置为update
由于默认引擎是MyISAM,Hibernate 逻辑上创建了带有索引的MyISAM 表,忽略了创建外键(因为MyISAM 不支持这样的约束)。
现在我想将每个表迁移到InnoDB,我希望 Hibernate 自动创建缺少的外键。不幸的是,Hibernate 似乎只是在寻找索引:
- 如果索引存在,Hibernate不会创建对应的外键;
- 如果我删除索引,Hibernate 将创建索引和外键。
由于我不想删除架构中的每个索引,您是否知道有一种方法可以告诉 Hibernate 即使创建了索引也创建外键?
谢谢。
【问题讨论】:
-
你不能让 hbm2ddl 从头开始重新创建数据库吗?它不是为在生产环境中使用而设计的,所以如果 Hibernate 还没有更新,我不希望它能够做到这一点。
-
实际上我想轻松转换我的测试环境数据库,以便对生成的数据库进行基准测试和测试。如果一切正常并且基准测试是决定性的,我绝对不会在我的生产环境中使用 hbm2ddl 更新,而是在我的暂存环境中测试足够的 SQL 脚本。
标签: mysql hibernate innodb myisam dialect