问题
我真的想知道更多关于更新,导出和可以赋予hibernate.hbm2ddl.auto
的值
我需要知道何时使用更新,何时不使用?还有什么选择?
这些是可能在DB上发生的变化:
- 新桌子
- 旧表中的新列
- 列已删除
- 列的数据类型已更改
- 一种列更改了其属性
- 桌子掉了下来
- 列的值已更改
在每种情况下,最佳解决方案是什么?
#1 热门回答(907 赞)
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更新脚本,将更改从一个版本应用到下一个版本。