Java Hibernate hbm2ddl.auto配置的可能值是什么?它们的作用是什么

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的值的信息 我需要知道何时使用更新,何时不使用?还有什么选择呢

以下是可能在DB上发生的更改:

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

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

配置属性称为
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
    -将通过比较现有数据库架构与实体映射来更新数据库架构
如果您计划添加函数或执行一些自定义脚本,则hibernate.hbm2ddl.auto=“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;