2013-01-03 73 views
0

我遇到Hibernate和外键下面的问题:使用Hibernate创建外键

  • databasePlatform

    当我第一次部署我的web应用程序时,Hibernate用这个参数(以及许多其他)配置设置为“通用”(不是引擎专用)方言org.hibernate.dialect.MySQLDialect

  • hibernate.hbm2ddl.auto设置为update

作为默认引擎为MyISAM,休眠逻辑创建MyISAM表与索引,忽略创建外键(因为MyISAM不支持这样的限制)。

现在,我想每一个表迁移到InnoDB,我想Hibernate来自动创建缺少的外键。不幸的是,它看起来像休眠只是寻找索引:

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

由于我不想放弃架构中的每个索引,你知道一种方法来告诉Hibernate创建外键,即使索引被创建吗?

谢谢。

+1

你不能只是让hbm2ddl从零开始重新创建数据库吗?它不是为在生产环境中使用而设计的,所以我不希望Hibernate能够做到这一点,如果它尚未在更新中。 –

+0

其实我很想轻松转换我的测试环境数据库,以便对基准测试数据库进行基准测试。如果一切正常并且基准是确凿的,那么我绝对不会在我的生产环境中使用hbm2ddl更新,而是在我的临时环境中测试的足够的SQL脚本。 – ssssteffff

回答

0

我的建议是,让Hibernate来重新创建整个架构,因为这是你的开发数据库。

但是,如果你有大量的测试数据你不想失去,那么我会创建一个使用的MySQL命令来自动删除所有的指标对Hibernate将它们重新创建一个脚本。你需要的命令是:

show tables; 

show index from `table_name`; 

drop index `index_name` on `table_name`; 

组织这些成某种形式的程序脚本(外壳,Python或应用建筑物等)的,你是好去。