代码之家  ›  专栏  ›  技术社区  ›  willcodejavaforfood

JPA/Hibernate支持迁移?

  •  23
  • willcodejavaforfood  · 技术社区  · 14 年前

    我目前正在使用jpa/hibernate在h2数据库中保存数据的桌面应用程序上工作。我很好奇如果将来出于某种原因需要更改数据库模式,我的选择是什么。也许我需要引入新的实体,删除它们,或者仅仅改变实体中属性的类型。

    • JPA/Hibernate是否支持这样做?
    • 我需要手动编写解决方案脚本吗?
    3 回复  |  直到 11 年前
        1
  •  20
  •   Community CDub    8 年前

    我通常让Hibernate在开发期间生成DDL,然后在部署到测试服务器时创建一个手动SQL迁移脚本(稍后我也将其用于UAT和实时服务器)。

    Hibernate中的DDL生成根本不支持数据迁移,如果只添加一个非空字段,那么DDL生成就无法帮助您。

    我还没有找到任何真正有用的迁移抽象来帮助实现这一点。

    有很多图书馆 this SO question 例如),但是当您执行诸如使用联合继承将现有实体拆分为层次结构之类的操作时,您总是返回到纯SQL。

        2
  •  7
  •   Community CDub    8 年前

    也许我需要引入新的实体,删除它们,或者仅仅改变实体中属性的类型。

    我没有这方面的经验,但Liquibase提供了一些 Hibernate Integration 并且可以将映射与数据库进行比较,并生成相应的更改日志:

    Liquibase Hibernate集成 记录当前休眠映射到更改日志文件所需的数据库更改 然后您可以在执行之前根据需要检查和修改。

    仍在寻找机会来利用它,并找到一些我悬而未决的问题的答案:

    • 它在使用注释时工作吗?
    • 它需要一个 hibernate.cfg.xml 文件(尽管这不会是一个很大的障碍)?

    更新: 好的,这两个问题都由内森·沃克兰在 this response 答案是:

    • 它在使用注释时工作
    • 它需要hibernate.cfg.xml(目前)
        3
  •  2
  •   Bozho    13 年前

    有两种选择:

    • 数据库休眠-手动将数据库更改镜像到实体。这意味着你的数据库“领先”
    • 休眠到数据库-任意使用 hibernate.hbm2ddl.auto=update ,或在更改实体后手动更改数据库-此处对象模型是“leading”