JPA/休眠对迁移的支持?
我目前正在开发一个桌面应用程序,使用JPA / Hibernate将数据保存在H2数据库中。我很好奇,如果将来由于某种原因需要对数据库架构进行更改,我的选择是什么。也许我必须引入新的实体,删除它们或只是更改实体中的属性类型。
- JPA/Hibernate 中是否支持执行此操作?
- 我是否必须手动编写解决方案脚本?
我目前正在开发一个桌面应用程序,使用JPA / Hibernate将数据保存在H2数据库中。我很好奇,如果将来由于某种原因需要对数据库架构进行更改,我的选择是什么。也许我必须引入新的实体,删除它们或只是更改实体中的属性类型。
我通常让Hibernate在开发过程中生成DDL,然后在部署到测试服务器时创建一个手动SQL迁移脚本(我稍后也将其用于UAT和实时服务器)。
Hibernate 中的 DDL 生成根本不支持数据迁移,如果您只添加一个非空字段,则 DDL 生成无法为您提供帮助。
我还没有找到任何真正有用的迁移抽象来帮助解决这个问题。
有许多库(例如,请看一下这个SO问题),但是当您使用联接继承将现有实体拆分为层次结构之类的操作时,您总是会回到纯SQL。
也许我必须引入新的实体,删除它们或只是更改实体中的属性类型。
我没有任何经验,但Liquibase提供了一些Hibernate集成,可以将您的映射与数据库进行比较并生成适当的更改日志:
LiquiBase-Hibernate 集成将当前 Hibernate 映射所需的数据库更改记录到一个更改日志文件,然后您可以在执行之前根据需要检查和修改该文件。
仍然在寻找机会玩它,并找到一些我悬而未决的问题的答案:
hibernate.cfg.xml
更新:好的,Nathan Voxland在此回复中涵盖了这两个问题,答案是: