如何在不丢失Hibernate数据的情况下更新数据库模式?

art*_*emb 25 database schema hibernate migrate

想象一下,您正在使用Hibernate和JBoss开发Java EE应用程序.您有一个正在运行的服务器,其中包含一些重要数据.您偶尔会发布下一个版本的应用程序(1-2周),并且它们在持久层中有一堆更改:

  • 新实体
  • 删除了实体
  • 属性类型更改
  • 属性名称更改
  • 关系变化

您如何有效地设置更新数据库模式并保留数据的系统?据我所知(我可能会误会),Hibernate不会执行alter column,drop/alter constraint.

谢谢你,Artem B.

Nat*_*and 17

LiquiBase是你最好的选择.它有一个hibernate集成模式,它使用Hibernate的hbm2ddl来比较你的数据库和你的hibernate映射,但是它不是自动更新数据库,而是输出一个liquibase changelog文件,可以在实际运行之前进行检查.

虽然更方便,但任何比较数据库和hibernate映射的工具都会出错.有关示例,请参见http://www.liquibase.org/2007/06/the-problem-with-database-diffs.html.使用liquibase,您可以构建一个数据库更改列表,因为您可以使用可以在具有分支和合并的代码中生存的格式进行开发.