Java JPA/Hibernate对迁移的支持?

Java JPA/Hibernate对迁移的支持?,java,hibernate,jpa,h2,Java,Hibernate,Jpa,H2,我目前正在使用JPA/Hibernate开发一个桌面应用程序,以将数据持久化到H2数据库中。我很好奇,如果将来出于某种原因需要更改数据库模式,我的选择是什么。也许我必须引入新的实体,删除它们,或者只是更改实体中属性的类型 JPA/Hibernate中是否支持这样做 我是否需要手动编写解决方案脚本 我通常让Hibernate在开发过程中生成DDL,然后在部署到测试服务器时创建一个手动SQL迁移脚本(稍后我也将其用于UAT和实时服务器) Hibernate中的DDL生成根本不支持数据迁移,如果只添

我目前正在使用JPA/Hibernate开发一个桌面应用程序,以将数据持久化到H2数据库中。我很好奇,如果将来出于某种原因需要更改数据库模式,我的选择是什么。也许我必须引入新的实体,删除它们,或者只是更改实体中属性的类型

  • JPA/Hibernate中是否支持这样做
  • 我是否需要手动编写解决方案脚本

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

Hibernate中的DDL生成根本不支持数据迁移,如果只添加一个非空字段,DDL生成就帮不了你

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

有很多库(请看示例),但是当您使用连接继承将现有实体拆分为层次结构时,您总是会返回到纯SQL。

有两个选项:

  • 数据库休眠-手动将数据库更改镜像到实体。这意味着您的数据库处于“领先”状态
  • hibernate to db-使用
    hibernate.hbm2ddl.auto=update
    ,或者在更改实体后手动更改db-这里的对象模型是“前导的”
也许我必须引入新的实体,删除它们,或者只是更改实体中属性的类型

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

LiquiBase Hibernate integration将当前Hibernate映射所需的数据库更改记录到更改日志文件中,您可以在执行之前根据需要检查和修改该文件

仍然在寻找机会玩它,并找到我未决问题的一些答案:

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

更新:好的,Nathan Voxland在中介绍了这两个问题,答案如下:

  • 使用注释时有效
  • 它需要一个hibernate.cfg.xml(目前)

什么样的更改可以休眠。hbm2ddl=在不破坏数据库的情况下自动处理?:)几乎没有。除了删除列之外,我想,您必须自己删除它们。不要在生产环境中使用
hbm2ddl=auto
,如果您这样做,那就是自找麻烦。首先,没有hbm2ddl=auto,只有hbm2ddl.auto=update,您不应该在生产环境中使用它production@OttoAllmendinger我会把房子的名字定下来。我知道很多人都说“不要在生产中使用它”,但如果你很小心,并且有一个登台环境,这是一个比支持迁移脚本更好的选择。酷,我实际上没有hibernate映射文件,只有一个持久性。xml@willcodejavaforfood是的,这里也一样。但正如我所写的,我不确定它是否能够处理persistence.xml(我正在考虑生成一个hibernate.cfg.xml,以便在需要时使用它)。也许打开另一个问题,(Liquibase的创建者)就会出现:)根据这个[问题](您确实需要)您需要一个hibernate.cfg.xml,但您是对的,这不会是一个大问题。如果我们可以使用hibernate创建数据库和东西,那么迁移工具的需求是什么-jpa@IshanGarg无法通过hibernate jpa迁移数据。上面给出了一个简单的例子:如果向表中添加一个非null列,那么hibernate jpa迁移本身就不知道为现有记录在该列中放置什么。但也有很多更复杂的情况:合并两列或使用特定的解析规则拆分一列,将表中的记录拆分为多个表等。对于任何此类情况,您需要hibernate jpa单独无法提供的内容。寻找比2017年更新的答案这是一个老问题,但不断有人问,无论如何。我将在这里提及,以供将来参考。它允许通过SQL进行数据库维护/版本控制-这也允许数据迁移。从现有/维护的数据库中,您可以使用hibernate生成JPA实体。嘿,如果我们可以使用hibernate JPA@user625488创建数据库和文件,那么迁移工具需要什么