Java Hibernate hbm2ddl.auto配置的可能值是什么?它们的作用是什么
我真的很想知道更多关于更新、导出以及可以提供给hibernate.hbm2ddl.auto的值的信息 我需要知道何时使用更新,何时不使用?还有什么选择呢 以下是可能在DB上发生的更改:Java Hibernate hbm2ddl.auto配置的可能值是什么?它们的作用是什么,java,hibernate,hbm2ddl,Java,Hibernate,Hbm2ddl,我真的很想知道更多关于更新、导出以及可以提供给hibernate.hbm2ddl.auto的值的信息 我需要知道何时使用更新,何时不使用?还有什么选择呢 以下是可能在DB上发生的更改: 新桌子 旧表中的新列 删除列 列的数据类型已更改 列的类型更改了其属性 桌子掉了 列的值已更改 在每种情况下,最好的解决方案是什么?配置属性称为hibernate.hbm2ddl.auto 在我们的开发环境中,我们将hibernate.hbm2ddl.auto=create drop设置为每次部署时删除并创建
- 新桌子
- 旧表中的新列
- 删除列
- 列的数据类型已更改
- 列的类型更改了其属性
- 桌子掉了
- 列的值已更改
在每种情况下,最好的解决方案是什么?配置属性称为
hibernate.hbm2ddl.auto
在我们的开发环境中,我们将hibernate.hbm2ddl.auto=create drop
设置为每次部署时删除并创建一个干净的数据库,以便数据库处于已知状态
理论上,您可以设置hibernate.hbm2ddl.auto=update
,通过对模型的更改来更新数据库,但我不相信生产数据库会这样做。早期版本的文件说,这至少是实验性的;我不知道目前的情况
因此,对于我们的生产数据库,不要设置hibernate.hbm2ddl.auto
——默认设置是不更改数据库。相反,我们手动创建一个SQL DDL更新脚本,将更改从一个版本应用到下一个版本。我将用于更新数据库。hibernate的模式更新功能对于开发人员在开发新功能时来说是非常好的。在生产环境中,需要更加小心地处理db升级。来自:
hibernate.hbm2ddl.auto在创建SessionFactory时自动验证架构DDL或将其导出到数据库。使用createdrop,当SessionFactory显式关闭时,数据库模式将被删除
e、 g.验证|更新|创建|创建删除
因此,可能的选择列表如下:
- 验证:验证架构,不更改数据库
- 更新:更新模式
- 创建:创建模式,销毁以前的数据
- createdrop:当SessionFactory显式关闭时(通常在应用程序停止时)删除模式
- 无:不处理架构,不更改数据库
这些选项似乎是为了开发人员的工具,而不是为了方便任何生产级数据库,您可能想看看下面的问题 还有一个未记录的值“none”来完全禁用它。我认为你应该把注意力集中在
SchemaExport Class
这个类使您的配置成为动态的
所以它允许你选择你最喜欢的套房
签出首先,
hbm2ddl
配置属性的可能值如下:
-不执行任何操作。将不会生成架构无
-将生成数据库架构仅创建
-数据库架构将被删除drop
-随后将删除并创建数据库架构create
-数据库架构将被删除并随后创建。关闭create drop
后,数据库架构将被删除会话工厂
-将使用实体映射验证数据库架构验证
-将通过比较现有数据库架构与实体映射来更新数据库架构update
但是,即使您使用Flyway,您仍然可以使用hbm2ddl生成初始迁移脚本。如果您不想在应用程序中使用字符串并且正在查找预定义常量,请查看hibernate JAR中包含的
org.hibernate.cfg.AvailableSettings
类,在这里,您可以找到所有可能设置的常量。以您的情况为例:
/**
* Auto export/update schema using hbm2ddl tool. Valid values are <tt>update</tt>,
* <tt>create</tt>, <tt>create-drop</tt> and <tt>validate</tt>.
*/
String HBM2DDL_AUTO = "hibernate.hbm2ddl.auto";
/**
*使用hbm2ddl工具自动导出/更新架构。有效值已更新,
*创建、创建、删除和验证。
*/
字符串HBM2DDL_AUTO=“hibernate.HBM2DDL.AUTO”;
虽然这是一篇很老的帖子,但当我做了一些关于这个主题的研究后,我想到了分享它
hibernate.hbm2ddl.auto
根据文档,它可以有四个有效值:创建|更新|验证|创建删除 以下是这些值所示行为的解释:
- 创建:-创建架构时,架构中以前存在的数据(如果存在)将丢失
- 更新:-使用给定值更新架构
- 验证:-验证架构。它不会改变数据库
- create drop:-通过销毁以前存在的数据(如果有)来创建架构。它还会在SessionFactory关闭时删除数据库架构
- 在更新的情况下,如果数据库中不存在模式,则创建模式
- 在验证的情况下,如果数据库中不存在模式,则不会创建模式。相反,它将抛出一个错误:-
找不到表:
- 如果是create drop,则在关闭会话时不会删除架构。它仅在关闭SessionFactory时才会下降
- 如果我给这个属性任何值(比如abc,而不是上面讨论的四个值),或者它只是留空。它表现出以下行为:
-如果数据库中不存在架构:-它将创建架构
-如果数据库中存在架构:-更新
<entry key="hibernate.hbm2ddl.auto" value="create">
<entry key="hibernate.hbm2ddl.auto" value="update">
<entry key="hibernate.hbm2ddl.auto" value="validate">
<entry key="hibernate.hbm2ddl.auto" value="create-drop">
/** * DDL mode. This is actually a shortcut for the "hibernate.hbm2ddl.auto" * property. Defaults to "create-drop" when using an embedded database and no * schema manager was detected. Otherwise, defaults to "none". */ private String ddlAuto;