使用hbm2ddl为数据库模式更新生成SQL DDL(不丢失数据)

时间:2010-06-21 22:32:22

标签: hibernate orm code-generation

我一直在使用hbm2ddlhbm2java根据我的XML映射文件(hbm.xml)为我的项目构建数据库和POJO。我现在开始在系统中获得一些真实数据,因此重新运行我的ant脚本会丢弃数据库并重新创建所有内容不再是一个可行的选项,因为我想保留数据。我听说有一个hbm2ddl.auto功能可用于修改数据库结构而不删除数据,但我从s / o的一些答案中得知这不是最佳实践。

我的理解是您应该根据映射文件中的更改编写SQL DDL并针对数据库运行它。我想知道是否可以使用hbm2ddl根据映射文件生成此DDL。我也关注LiquiBase,但不确定这些是否适合我的情况,因为我希望继续使用hbm.xml文件作为关键数据定义源。

赞赏意见和建议 - 提前致谢!

2 个答案:

答案 0 :(得分:0)

这可能不是在生产环境中执行此操作的最佳方式,但如果您不“与成千上万的用户共同生活”,请按以下步骤操作:

  • hibernate.hbm2dll设置为update(这是一个hibernate属性,在hibernate.cfg.xml中设置,或者在spring配置中,如果你使用它)
  • 每次(重新)启动应用程序时,都会使用新字段和约束更新数据库架构。
  • 旧字段可能无法删除,因此您可以手动清理它们
  • 原语(对应于not null的列应该分配default,或者您应该进行手动UPDATE查询。否则,您将获得运行时异常。

答案 1 :(得分:0)

上周我问了同样的问题,我决定使用LiquiBase。这里有很多关于“Stack Overflow”的声明,它们阻止你在生产环境中使用hbm2ddl。我也是。

当我尝试添加唯一约束时,我遇到了hbm2ddl的功能限制,我意识到是时候选择更复杂的方法了。