协慌网

登录 贡献 社区

#Hibernate hbm2ddl.auto 配置的可能值是什么,它们做了什么

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

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

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

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

答案

来自社区文档

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

例如验证 | 更新 | 创建 | 创建降

所以可能的选项列表是,

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

这些选项似乎是开发人员工具,而不是为了促进任何生产级数据库,您可能想要查看以下问题; Hibernate:hbm2ddl.auto = 在生产中更新?

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

配置属性名为hibernate.hbm2ddl.auto

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

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

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