我目前正在使用JPA / Hibernate处理桌面应用程序,以便将数据保存在H2数据库中。如果我出于某种原因需要在将来对数据库模式进行更改,我很好奇我的选择是什么。也许我必须引入新实体,删除它们或只是更改实体中的属性类型。
答案 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中涵盖了这两个问题,答案是:
答案 2 :(得分:2)
有两种选择:
hibernate.hbm2ddl.auto=update
,或者在更改实体后手动更改数据库 - 这里你的对象模型是“领先”