Hibernate hbm2ddl.auto,可能的取值及其作用

54

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

  • validate
  • update
  • create
  • create-drop

所有这些值都是做什么用的?

Hibernate参考文档只简要介绍了create-drop,但没有提到其他值:

hibernate.hbm2ddl.auto

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

例如 validate | update | create | create-drop

我在这些Stack Overflow问题中找到了非常有用的解释:

但官方文档中仍然没有任何说明。


1
查看这个问题的答案:https://dev59.com/SHRC5IYBdhLWcg3wAcXU - Jason S
实际上,我链接到了这个问题。我正在寻找Hibernate文档中官方的解释。 - Danilo Piazzalunga
3个回答

77

hbm2ddl.auto属性的可能选项列表如下:

  • validate:验证模式,检查数据库模式是否匹配,不会对数据库模式进行任何更改,通常用于生产环境。
  • update:更新模式,根据实体类自动更新数据库模式。
  • create:创建模式,根据实体类自动创建数据库模式,并销毁先前的数据。
  • create-drop:与create相同,但在会话结束时也会删除数据库模式。这非常适合早期开发或测试。

我尝试澄清你的答案,请查看我的更改以确保它们反映了你最初的意图并且准确无误。 - Sled
6
请注意,更新操作不会创建不存在的表,而创建操作将总是清空任何现有数据。没有一种自动的方式可以告诉 Hibernate 只有在表不存在时才创建。 - humanityANDpeace
2
@humanityANDpeace 我总是使用更新操作,从未遇到过“缺少表”或其他类似问题。 - hugo blanc

12
您提供的链接已经是官方文档,因此今天没有比这更正式和全面的了。
所以我想您的问题的答案有两个方面:
- 要么在Hibernate问题跟踪器中提交增强请求(最好带有建议) - 要么阅读相应的代码 我知道这不是您梦寐以求的完美答案,但这实际上是您今天所拥有的全部内容。
但好消息是该项目是开源的,因此您拥有所有需要改进它的东西 :-)。

1
创建了一个问题,并提出了初步的建议:https://hibernate.atlassian.net/browse/HHH-8789 - Danilo Piazzalunga

4

本文档已更新,包含此信息。这里是官方、最新的有关该功能的文档链接。

hibernate.hbm2ddl.auto (e.g. none (default value), create-only, drop, create, create-drop, validate, and update)

Setting to perform SchemaManagementTool actions automatically as part of the SessionFactory lifecycle. Valid options are defined by the externalHbm2ddlName value of the Action enum:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接