Java 如何关闭hbm2ddl?

Java 如何关闭hbm2ddl?,java,hibernate,orm,hbm2ddl,Java,Hibernate,Orm,Hbm2ddl,我在hibernate.properties中找不到有关如何关闭hbm2ddl的参考。 hibernate.hbm2ddl.auto=validate 当然,配置它的位置取决于您配置hibernate的方式——如果是编程方式,请在那里设置属性。如果来自hibernate.cfg.xml: <property name="hibernate.hbm2ddl.auto">validate</property> 验证 省略hibernate.hbm2ddl.auto默认为h

我在hibernate.properties中找不到有关如何关闭hbm2ddl的参考。

hibernate.hbm2ddl.auto=validate
当然,配置它的位置取决于您配置hibernate的方式——如果是编程方式,请在那里设置属性。如果来自hibernate.cfg.xml:

<property name="hibernate.hbm2ddl.auto">validate</property>
验证

省略
hibernate.hbm2ddl.auto
默认为hibernate不做任何事情。参考文件:

hbm2ddl.auto
选项打开 数据库的自动生成 模式直接导入数据库。 这也可以通过删除配置选项来关闭, 或者在帮助下重定向到文件 SchemaExport Ant任务的


hbm2ddl.auto
设置为
none
(未记录)可能会生成警告,例如:
org.hibernate.cfg.SettingsFactory-无法识别的“hibernate.hbm2ddl.auto”值:none

您可以通过以下方式将其关闭:

hibernate.hbm2ddl.auto=none

这是无证的,但却是无价之宝

为了弄清楚这一点,我们应该查看org.hibernate.cfg.SettingsFactory的源代码(根据使用的版本,您可能会看到其他内容):

org.hibernate.cfg.Settings
类中,这些变量初始化为:

private boolean autoCreateSchema;
private boolean autoDropSchema;
private boolean autoUpdateSchema;
private boolean autoValidateSchema;
因此,这些默认值为false


省略
hibernate.hbm2ddl.auto
设置应关闭
hbm2ddl\u auto
功能,正如建议的那样
hibernate.hbm2ddl.auto=none
,但在后一种情况下,您会在日志中收到警告。

此属性不是必需的。只需从xml文件中完全删除
hibernate.hbm2ddl.auto
条目。

如果输入不支持的值,它将告诉您支持哪些值:
o.h.b.i.SessionFactoryBuilderImpl:无法识别的hbm2ddl_自动值:bla。支持的值包括“创建”、“创建删除”、“更新”、“无”和“验证”。忽略

默认值为
none
,并得到官方支持和记录:

这意味着hbm2ddl无法关闭?当在属性文件或hibernate.cfg.xml文件中没有提到hibernate.hbm2ddl.auto时,它的默认值是多少?@Alex-我假设您已经尝试过了,但遇到了问题。见帕斯卡的答案。“验证”表示hibernate在启动时检查映射是否与DB一致。您也可以写入,这将产生相同的效果。这将导致
WARN org.hibernate.cfg.SettingsFactory-无法识别“hibernate.hbm2ddl.auto”的值:无
(使用版本4.3.11.Final时)。让它空着。@A4L没有土豆!它在SpringBoot 2上崩溃:
11:19:43.359-错误[main]SpringApplication.reportFailure:833-应用程序运行失败java.lang.IllegalArgumentException:无法识别的遗留“hibernate.hbm2ddl.auto”值:potato
@pdem此设置用于hibernate而不是spring引导。Spring boot使用hibernate,请检查Spring boot 2使用哪个版本的hibernate。这个答案基于hibernate的旧版本,请参阅我第一条评论中的链接。hibernate的实际稳定版本是。也请给我打电话。除此之外,此处报告的异常说明这是一个遗留设置,这意味着有一个替代设置,您应该使用它。@A4L是的,Spring Boot 2 RC1使用Hibernate 5.1.12.Final。我只是想警告你,在最新版本中,你的技巧似乎不再有效,但“无”效果很好。请参阅
SchemaManagementToolCoordinator.explain的源代码,其中值“none”在旧值(从“hibernate.”开始)上进行了显式测试,jpa值whìch是
javax.persistence.schema generation.database.action
,与
javax.persistence.schema generation.scripts.action
相协调。感谢您为我指出了新的javax值来代替hibernate值。希望现在没有一个值是有效的(至少从5.1.2.Final开始)。我省略了这个:我的应用程序属性上的spring.jpa.hibernate.ddl auto=false,错误就消失了。检查
hibernate核心
jar。枚举
org.hibernate.boot.SchemaAutoTooling
显示可能的值。我的版本是5.3.9,包含
NONE
private boolean autoCreateSchema;
private boolean autoDropSchema;
private boolean autoUpdateSchema;
private boolean autoValidateSchema;