我一直在研究使用hibernate来处理工作中的项目。它看起来像我们想要为给定的一组类生成数据库。但是,强烈建议不要在生产环境中使用hbm2ddl.auto = update。
环顾四周,我看不出人们为这种情况做了什么。一旦数据库被填充并在使用中,我们将希望在数据库中添加/更新额外的持久化类,而不使用不可靠的hibernate更新。
Flyway看起来对处理数据库架构更新很有用,但这仍然需要我们每次进行任何代码更改时手动创建升级脚本。
有没有一种简单的方法可以自动解决这个问题?如果它不适合在实时环境中更新,我真的看不到休眠点。
我错过了什么吗?
答案 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。