【问题标题】:Use of Hibernate and flyway in a production system在生产系统中使用 Hibernate 和 flyway
【发布时间】:2014-11-21 11:40:15
【问题描述】:

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

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

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

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

我错过了什么吗?

【问题讨论】:

  • “如果休眠在实时环境中更新不够好,我真的看不出它有什么意义。” - 你能多描述一下这个陈述吗?

标签: java hibernate jpa flyway


【解决方案1】:

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。

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 2019-08-29
    • 2014-03-31
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多