在生产系统中使用Hibernate和flyway

时间:2014-09-26 12:45:22

标签: java hibernate jpa flyway

我一直在研究使用hibernate来处理工作中的项目。它看起来像我们想要为给定的一组类生成数据库。但是,强烈建议不要在生产环境中使用hbm2ddl.auto = update。

环顾四周,我看不出人们为这种情况做了什么。一旦数据库被填充并在使用中,我们将希望在数据库中添加/更新额外的持久化类,而不使用不可靠的hibernate更新。

Flyway看起来对处理数据库架构更新很有用,但这仍然需要我们每次进行任何代码更改时手动创建升级脚本。

有没有一种简单的方法可以自动解决这个问题?如果它不适合在实时环境中更新,我真的看不到休眠点。

我错过了什么吗?

1 个答案:

答案 0 :(得分:9)

ORM框架不适合升级,因为它们没有关于架构差异的上下文信息。因此,如果您将列bar重命名为baz,则所有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。