JPA / Hibernate对迁移的支持?

时间:2010-10-13 12:26:47

标签: java hibernate jpa h2

我目前正在使用JPA / Hibernate处理桌面应用程序,以便将数据保存在H2数据库中。如果我出于某种原因需要在将来对数据库模式进行更改,我很好奇我的选择是什么。也许我必须引入新实体,删除它们或只是更改实体中的属性类型。

  • JPA / Hibernate是否支持这样做?
  • 我是否必须手动编写解决方案脚本?

3 个答案:

答案 0 :(得分:20)

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

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

我还没有找到任何真正有用的迁移抽象来帮助解决这个问题。

有很多库(看看this SO question的例子),但是当你使用连接继承将现有实体拆分为层次结构时,你总是回到纯SQL

答案 1 :(得分:7)

  

也许我必须引入新实体,删除它们或只更改实体中的属性类型。

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

  

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

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

  • 使用注释时是否有效?
  • 是否需要hibernate.cfg.xml文件(虽然这不会是一个很大的障碍)?

更新:好的,Nathan Voxland在this response中涵盖了这两个问题,答案是:

  • 使用注释时可以正常工作
  • 它需要一个hibernate.cfg.xml(现在)

答案 2 :(得分:2)

有两种选择:

  • db-to-hibernate - 镜像DB手动更改为您的实体。这意味着您的数据库是“领先”
  • hibernate-to-db - 使用hibernate.hbm2ddl.auto=update,或者在更改实体后手动更改数据库 - 这里你的对象模型是“领先”