当前位置:  开发笔记 > 编程语言 > 正文

#Hibernate hbm2ddl.auto配置的可能值是什么,它们做了什么

如何解决《#Hibernatehbm2ddl.auto配置的可能值是什么,它们做了什么》经验,为你挑选了10个好方法。

我真的想知道更多有关更新,导出和可以提供给hibernate.hbm2ddl.auto
我需要知道何时使用更新的值的更多信息,何时不知道?还有什么选择?

这些是可能发生在DB上的变化:

新表

旧表中的新列

列已删除

列的数据类型已更改

列的类型更改了其属性

桌子掉了

列的值已更改

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



1> James McMaho..:

来自社区文档:

hibernate.hbm2ddl.auto创建SessionFactory时,自动验证或将架构DDL导出到数据库.使用create-drop,当SessionFactory显式关闭时,将删除数据库模式.

例如验证| 更新| 创建| 创建降

所以可能的选项列表是,

validate:验证模式,不对数据库进行任何更改.

更新:更新架构.

create:创建架构,销毁以前的数据.

create-drop:显式关闭SessionFactory时删除模式,通常是在应用程序停止时.

这些选项似乎是开发人员工具,而不是为了促进任何生产级数据库,您可能想要查看以下问题; Hibernate:hbm2ddl.auto =在生产中更新?


我认为它说"eg"因为它只是一个社区文档,如果有人对所有可能的值感兴趣,可以在Hibernate的javadoc中找到它.(是的,只有这四个选项存在)http://docs.jboss.org/hibernate/orm/4.1/javadocs/org/hibernate/cfg/AvailableSettings.html#HBM2DDL_AUTO
只需阅读hibernate文档...获取有效值,它会说:"eg"......还有其他有效值吗?
如果你想让hibernate什么都不做,你也可以使用'aardvark'或'pigeon'或任何其他词.当然不是我会推荐的!
validate说验证架构,究竟是什么意思?
create-drop选项的一小部分内容.如果使用此选项,则不会删除整个架构,而是在运行此选项时删除其映射可用的表.例如,如果具有Schema S的数据库具有A,B,C表和Java代码,则只有A和B的映射,那么Hibernate将不会删除表C.

2> 小智..:

还有"无"的无证值可以完全禁用它.


**'空字符串'优于'无'**.要使用'none',您将收到警告消息:org.hibernate.cfg.SettingsFactory - "hibernate.hbm2ddl.auto"的无法识别的值:none
我打了补丁.添加"none"作为显式有效常量.
我比其他人更喜欢"hibernate.hbm2ddl.auto = potato"http://stackoverflow.com/a/15810379/838444
这实际上非常有用,因为Hibernate的模式验证有时会因完全有效的模式而失败.

3> Peter Hilton..:

调用配置属性 hibernate.hbm2ddl.auto

在我们的开发环境中,我们设置hibernate.hbm2ddl.auto=create-drop为每次部署时都删除并创建一个干净的数据库,以便我们的数据库处于已知状态.

从理论上讲,您可以设置hibernate.hbm2ddl.auto=update通过更改模型来更新数据库,但我不相信生产数据库.文档的早期版本说这至少是实验性的; 我不知道目前的状况.

因此,对于我们的生产数据库,请不要设置hibernate.hbm2ddl.auto- 默认是不进行数据库更改.相反,我们手动创建一个SQL DDL更新脚本,该脚本将更改从一个版本应用到下一个版本.


实际上,根据文档,create-drop会创建数据库表,并在显式关闭会话工厂时删除它们.在创建会话工厂时,它不会*删除表.
不,创建sessionfactory时create-drop和create都会删除表,然后当sessionfactory关闭时,create-drop也会丢弃表.请参见http://stackoverflow.com/a/6752698/1536382

4> Pat..:

我会使用liquibase来更新你的数据库.hibernate的架构更新功能在开发人员开发新功能时非常适合.在生产环境中,需要更仔细地处理db升级.


请参阅http://stackoverflow.com/questions/221379/hibernate-hbm2ddl-autoupdate-in-production,了解为何不应将hbm2ddl用于生产.

5> amit..:

虽然这是一个相当古老的帖子,但我对这个主题做了一些研究,所以想到分享它.

hibernate.hbm2ddl.auto

根据文档,它可以有四个有效值:

创建| 更新| 验证| 创建降

以下是对这些值所示行为的解释:

create: - 创建模式,模式中先前存在的数据(如果存在)将丢失

更新: - 使用给定值更新架构.

验证: - 验证架构.它不会改变数据库.

create-drop: - 创建模式,销毁先前存在的数据(如果有).当SessionFactory关闭时,它也会删除数据库模式.

以下是值得注意的重点:

更新的情况下,如果DB中不存在模式,则创建模式.

验证的情况下,如果DB中不存在架构,则不会创建它.相反,它会抛出一个错误: - Table not found:

create-drop的情况下,关闭会话时不会删除模式.它仅在关闭SessionFactory时才会丢弃.

如果我给这个属性赋予任何值(比如abc,而不是上面讨论的上述四个值),或者它只是留空.它显示以下行为:

- 如果数据库中没有架构: - 它会创建架构

- 如果数据库中存在架构: - 更新架构.



6> Vlad Mihalce..:

我为最常见的Hibernate DDL生成策略撰写了一篇博客文章:

    hbm2ddl如果您计划添加功能或执行一些自定义脚本,则方便但灵活性较低.

    最灵活的方法是使用迁飞.

但是,即使您使用Flyway,您仍然可以使用hbm2ddl生成初始迁移脚本.在本文中,您可以看到如何将JPA实体模型与jOOQ表模型相结合.



7> 小智..:

hibernate.hbm2ddl.auto 创建sessionFactory时,自动验证DDL并将其导出到架构.

默认情况下,它不会在DB上自动执行任何创建或修改.如果用户设置以下值之一,则它会自动执行DDL架构更改.

创建 - 创建模式


更新 - 更新现有架构


validate - 验证现有架构


create-drop - 在会话开始和结束时自动创建和删除架构



那么

8> Stefan Haber..:

如果您不想在应用程序中使用字符串并且正在查找预定义常量,请查看org.hibernate.cfg.AvailableSettingsHibernate 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 

这个类让你的配置变得动态所以它允许你选择你最好的套房......

结帐[SchemaExport]

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有