我目前正在使用JPA/Hibernate开发桌面应用程序,将数据持久化到H2数据库中。如果以后需要出于某种原因更改数据库模式,我想知道我的选择。也许我需要引入新的实体,删除它们或仅更改实体中属性的类型。
- JPA/Hibernate是否支持此操作?
- 我是否需要手动编写脚本来解决问题?
在开发过程中,我通常会让Hibernate生成DDL,然后在部署到测试服务器时创建手动的SQL迁移脚本(稍后也会用于UAT和生产服务器)。
Hibernate中的DDL生成完全不支持数据迁移,如果你只是添加一个非空字段,DDL生成无济于事。
我还没有找到任何真正有用的迁移抽象来帮助解决这个问题。
有许多库(可以参考这个SO问题进行举例),但当你像使用联合继承将现有实体拆分成层次结构时,你总是需要回到普通的SQL。
更新:好的,这两个问题都由Nathan Voxland在this response中回答了,答案是:
有两个选项:
hibernate.hbm2ddl.auto=update
,或在更改实体后手动更改数据库 - 这里你的对象模型是“主导的”hbm2ddl=auto
,那么你会自讨苦吃。请不要这样做。 - matt bhibernate.hbm2ddl.auto=update
这行放在哪个文件中? - Alexander Mills