Hibernate hbm2ddl.auto、可能的值以及它们的作用

Posted

技术标签:

【中文标题】Hibernate hbm2ddl.auto、可能的值以及它们的作用【英文标题】:Hibernate hbm2ddl.auto, possible values, and what they do 【发布时间】:2013-08-07 06:59:36 【问题描述】:

我正在查看 Hibernate hbm2ddl.auto 配置属性及其可能的值:

validate update create create-drop

所有这些值有什么作用?

Hibernate Reference Documentation 只简单介绍了create-drop,而没有提及其他值:

hibernate.hbm2ddl.auto

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

例如 validate | update | create | create-drop

我在这些 Stack Overflow 问题中发现非常有用的解释:

Hibernate hbm2ddl.auto possible values and what they do? Schema is not dropped on hbmddl.auto = create.drop

但官方文档中仍然没有。

【问题讨论】:

查看这个问题的答案:***.com/questions/438146/… 实际上,我链接到了这个问题。我在 Hibernate 文档中寻找 the 官方解释。 【参考方案1】:

对于hbm2ddl.auto 属性,可能的选项列表是:

validate:验证架构是否匹配,不对数据库架构进行任何更改,您可能希望将其用于生产。 更新:更新架构以反映被持久化的实体 create:为您的实体创建必要的架构,销毁之前的所有数据。 create-drop:像上面的 create 一样创建架构,但也会在会话结束时删除架构。这在早期开发或测试中非常有用。

【讨论】:

我试图清除您的答案,请检查我的更改以确保它们反映您的初衷并且准确无误。 请注意,update 不会创建不存在的表,而 create 将始终截断任何现有数据。没有办法自动告诉 hibernate 仅在表不存在时创建表 @humanityANDpeace 我总是使用更新,我从来没有遇到过“丢失的桌子”之类的情况【参考方案2】:

您提供的链接已经是官方文档。所以,到目前为止,没有比今天更正式、更全面的了。

所以我猜你的问题的答案有两个:

要么在Hibernate issue tracker 中提交增强请求(最好有提案) 或read the corresponding code

我知道这不是你梦寐以求的完美答案,但这实际上是你今天所拥有的一切。

但好消息是该项目是开源的,因此您拥有帮助改进它所需的一切:-)。

【讨论】:

创建了一个问题,提出了一个暂定提案:hibernate.atlassian.net/browse/HHH-8789【参考方案3】:

已更新文档以包含此信息。这是此功能的官方当前documentation 的链接。

hibernate.hbm2ddl.auto(例如无(默认值)、仅创建、删除、 创建、创建-删除、验证和更新)

设置为在 SessionFactory 生命周期中自动执行 SchemaManagementTool 操作。有效选项由 Action 枚举的 externalHbm2ddlName 值:

none
    No action will be performed.

create-only
    Database creation will be generated.

drop
    Database dropping will be generated.

create
    Database dropping will be generated followed by database creation.

create-drop
    Drop the schema and recreate it on SessionFactory startup. Additionally, drop the schema on SessionFactory shutdown.

validate
    Validate the database schema

update
    Update the database schema

【讨论】:

以上是关于Hibernate hbm2ddl.auto、可能的值以及它们的作用的主要内容,如果未能解决你的问题,请参考以下文章

休眠 - hibernate.hbm2ddl.auto = 验证

Hibernate: hibernate.hbm2ddl.auto=update 显示生成的 sql

hibernate.hbm2ddl.auto配置详解

hibernate.hbm2ddl.auto配置详解

hibernate.hbm2ddl.auto配置详解

hibernate.hbm2ddl.auto =创建(不创建表)