2013-01-03 75 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或應用建築物等)的,你是好去。