在生产系统中使用Hibernate和flyway

wyb*_*urn 3 java hibernate jpa flyway

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

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

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

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

我错过了什么吗?

Pav*_*ral 9

ORM框架不适合升级,因为它们没有关于模式差异的上下文信息.所以如果你将列重命名barbaz,所有Hibernate都会看到:

ALTER TABLE foo DROP COLUMN bar;
ALTER TABLE foo ADD COLUMN baz VARCHAR(255) NOT NULL;
Run Code Online (Sandbox Code Playgroud)

但实际上你可能想要这样做:

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;
Run Code Online (Sandbox Code Playgroud)

除非您开始明确描述架构更改,否则任何框架都不会生成正确的DDL更新.而且我不知道任何Hibernate功能,因此你需要Flyway或Liquibase.