Hibernate hbm2ddl.auto可能的值和他们做什么?

问题

我真的想知道更多关于更新,导出和可以赋予hibernate.hbm2ddl.auto的值
我需要知道何时使用更新,何时不使用?还有什么选择?

这些是可能在DB上发生的变化:

  • 新桌子
  • 旧表中的新列
  • 列已删除
  • 列的数据类型已更改
  • 一种列更改了其属性
  • 桌子掉了下来
  • 列的值已更改

在每种情况下,最佳解决方案是什么?


#1 热门回答(907 赞)

community documentation

hibernate.hbm2ddl.auto创建SessionFactory时,自动验证或将架构DDL导出到数据库。使用create-drop,当SessionFactory显式关闭时,数据库模式将被删除。例如验证|更新|创建|创建降

所以可能的选项列表是,

  • 验证:验证模式,不更改数据库。
  • 更新:更新架构。
  • 创建:创建模式,销毁以前的数据。
  • create-drop:当SessionFactory被显式关闭时,通常在应用程序停止时删除模式。

这些选项似乎是开发人员工具而不是为了方便任何生产级数据库,您可能想看看以下问题; Hibernate: hbm2ddl.auto=update in production?


#2 热门回答(155 赞)

还有“无”的无证价值完全禁用它。


#3 热门回答(140 赞)

配置属性被称为hibernate.hbm2ddl.auto

在我们的开发环境中,我们将hibernate.hbm2ddl.auto = create-drop设置为drop,并在每次部署时创建一个干净的数据库,以便我们的数据库处于已知状态。

从理论上讲,你可以设置hibernate.hbm2ddl.auto = update来更新你的数据库并修改你的模型,但我不会相信生产数据库。早期版本的文件表示这至少是实验性的;我不知道目前的状况。

因此,对于我们的生产数据库,不要设置hibernate.hbm2ddl.auto - 默认是不进行数据库更改。相反,我们手动创建一个SQL DDL更新脚本,将更改从一个版本应用到下一个版本。