我真的想知道更多有关更新,导出和可以提供给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
为每次部署时都删除并创建一个干净的数据库,以便我们的数据库处于已知状态.
从理论上讲,您可以设置hibernate.hbm2ddl.auto=update
通过更改模型来更新数据库,但我不相信生产数据库.文档的早期版本说这至少是实验性的; 我不知道目前的状况.
因此,对于我们的生产数据库,请不要设置hibernate.hbm2ddl.auto
- 默认是不进行数据库更改.相反,我们手动创建一个SQL DDL更新脚本,该脚本将更改从一个版本应用到下一个版本.
我会使用liquibase来更新你的数据库.hibernate的架构更新功能在开发人员开发新功能时非常适合.在生产环境中,需要更仔细地处理db升级.
虽然这是一个相当古老的帖子,但我对这个主题做了一些研究,所以想到分享它.
hibernate.hbm2ddl.auto
根据文档,它可以有四个有效值:
创建| 更新| 验证| 创建降
以下是对这些值所示行为的解释:
create: - 创建模式,模式中先前存在的数据(如果存在)将丢失
更新: - 使用给定值更新架构.
验证: - 验证架构.它不会改变数据库.
create-drop: - 创建模式,销毁先前存在的数据(如果有).当SessionFactory关闭时,它也会删除数据库模式.
以下是值得注意的重点:
在更新的情况下,如果DB中不存在模式,则创建模式.
在验证的情况下,如果DB中不存在架构,则不会创建它.相反,它会抛出一个错误: - 在create-drop的情况下,关闭会话时不会删除模式.它仅在关闭SessionFactory时才会丢弃. 如果我给这个属性赋予任何值(比如abc,而不是上面讨论的上述四个值),或者它只是留空.它显示以下行为: - 如果数据库中没有架构: - 它会创建架构 - 如果数据库中存在架构: - 更新架构. 我为最常见的Hibernate DDL生成策略撰写了一篇博客文章: 在最灵活的方法是使用迁飞. 但是,即使您使用Flyway,您仍然可以使用hbm2ddl生成初始迁移脚本.在本文中,您可以看到如何将JPA实体模型与jOOQ表模型相结合. 默认情况下,它不会在DB上自动执行任何创建或修改.如果用户设置以下值之一,则它会自动执行DDL架构更改.
创建 - 创建模式 更新 - 更新现有架构 validate - 验证现有架构 create-drop - 在会话开始和结束时自动创建和删除架构 如果您不想在应用程序中使用字符串并且正在查找预定义常量,请查看
我认为你应该专注于 这个类让你的配置变得动态所以它允许你选择你最好的套房...... 结帐[SchemaExport]Table not found:
6> Vlad Mihalce..:
hbm2ddl
如果您计划添加功能或执行一些自定义脚本,则方便但灵活性较低.
7> 小智..:hibernate.hbm2ddl.auto
创建sessionFactory时,自动验证DDL并将其导出到架构.
那么
8> Stefan Haber..:org.hibernate.cfg.AvailableSettings
Hibernate JAR中包含的类,您可以在其中找到所有可能设置的常量.以你的情况为例:/**
* Auto export/update schema using hbm2ddl tool. Valid values are update,
* create, create-drop and validate.
*/
String HBM2DDL_AUTO = "hibernate.hbm2ddl.auto";
为什么参考700多行长源文件直接回答近500个vole ups?
9> 小智..:validate
:验证架构,数据库没有任何变化。update
:使用当前的执行查询更新架构。create
:每次创建新的架构,并销毁先前的数据。create-drop
:在停止应用程序或显式关闭SessionFactory时删除架构。
10> Vishal Sharm..:SchemaExport Class
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有