假设您正在使用Hibernate和JBoss开发一个JavaEE应用程序.您有一个正在运行的服务器,其中包含一些重要数据.你每隔一段时间(1-2周)发布一次应用程序的下一个版本,他们会发现持久层有很多变化:

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

如何有效地设置更新数据库架构并保留数据的系统?据我所知(我可能弄错了),Hibernate不执行ALTER COLUMN、DROP/ALTER CONSTRAINT.

谢谢, 阿特姆B.

推荐答案

LiquiBase是你最好的赌注.它有一个hibernate integration模式,使用Hibernate的hbm2ddl来比较您的数据库和Hibernate映射,但是它不是自动更新数据库,而是输出一个可以在实际运行之前判断的Liquibase ChangeLog文件.

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

Database相关问答推荐

即使将enable_seqscan设置为关闭,也未使用数组列上的 GIN 索引?

如何在 C# 控制台应用程序中执行 CMD 命令?

哪个能够存储 1 亿条记录的嵌入式数据库具有高效的 C 或 C++ API

sql-dump 有什么用?

Sql更新查询

group by会自动保证order by吗?

如何在 Products 表的主键和自然键之间做出决定?

SQLite 中内存数据库的优势

使用 PHPUnit 进行数据库测试的最佳实践

返回 SQLite 数据库中表大小的查询

postgresql 在 where 子句中使用 json 子元素

如何产生幻读?

如何在 Postgres 9.6+ 中生成长度为 N 的随机、唯一的字母数字 ID?

MySQL相对于其他数据库的缺点

在 postgresql 中将 varchar 列升级为枚举类型

如何在 SQL Server 中生成并手动插入唯一标识符?

复式记账的关系数据模型

MySQL 整数 0 与 NULL

分离实体和被管理实体

位图索引有何帮助?