JPA/休眠对迁移的支持?

2022-09-01 09:56:46

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

  • JPA/Hibernate 中是否支持执行此操作?
  • 我是否必须手动编写解决方案脚本?

答案 1

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

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

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

有许多库(例如,请看一下这个SO问题),但是当您使用联接继承将现有实体拆分为层次结构之类的操作时,您总是会回到纯SQL。


答案 2

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

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

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

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

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

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

  • 是的,它在使用注释时有效
  • 是的,它需要休眠.cfg.xml(目前)

推荐