2014-09-26 29 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。

相关问题