2014-09-26 92 views
2

我一直在研究在工作中使用hibernate的項目。它看起來像我們想要爲一組給定的類生成數據庫。但是,似乎強烈建議不要在生產環境中使用hbm2ddl.auto = update。在生產系統中使用Hibernate和flyway

環顧四周,我看不到人們爲這種情況做些什麼。一旦數據庫被填充和使用,我們將要添加/更新額外的持久化類到數據庫中,而不使用不可靠的hibernate更新。

Flyway看起來像處理數據庫模式更新會很有用,但是這仍然要求我們每次更改代碼時都要手動創建升級腳本。

有沒有簡單的方法來自動解決這個問題?如果在實時環境中更新不夠好,我無法真正看到休眠的關鍵。

我錯過了什麼嗎?

+0

*「如果在實時環境中更新不夠好,我無法真正瞭解hibernate的要點。」* - 您能否在此聲明中多加描述一下? – 2014-09-26 13:11:29

回答

8

ORM框架不適合升級,因爲它們沒有關於模式差異的上下文信息。所以,如果您重命名列barbaz,所有的Hibernate將看到的是:

ALTER TABLE foo DROP COLUMN bar; 
ALTER TABLE foo ADD COLUMN baz VARCHAR(255) NOT NULL; 

但在現實中,你可能會想這樣做:

ALTER TABLE foo ADD COLUMN baz VARCHAR(255); 
UPDATE foo SET baz = bar; 
ALTER TABLE foo ALTER COLUMN baz SET NOT NULL; 
ALTER TABLE foo DROP COLUMN bar; 

除非你開始明確地描述你的架構更改,沒有框架將生成正確的DDL更新。而且我不知道任何Hibernate功能,因此您需要Flyway或Liquibase。