How to turn off hbm2ddl?
我找不到关于如何关闭hbm2ddl的参考。
只是忽略hibernate.hbm2ddl.auto默认为Hibernate没有做任何事情。从参考文档:
1.1.4. Hibernate configuration
The hbm2ddl.auto option turns on
automatic generation of database
schemas directly into the database.
This can also be turned off by removing the configuration option,
or redirected to a file with the help
of the SchemaExport Ant task.
将hbm2ddl.auto设置为none(未记录)可能会生成警告,例如:org.hibernate.cfg.SettingsFactory - Unrecognized value for"hibernate.hbm2ddl.auto": none
-
希望现在没有一个是有效值(至少从5.1.2.Final开始)。
-
我在我的应用程序属性上省略了这个:spring.jpa.hibernate.ddl-auto = false,错误消失了。
-
检查hibernate-core jar。枚举org.hibernate.boot.SchemaAutoTooling显示可能的值。我的版本是5.3.9并包含NONE。
您可以通过以下方式将其关闭:
1
| hibernate.hbm2ddl.auto=none |
它没有证件但是无价!
-
你也可以写一下hibernate.hbm2ddl.auto = potato,这会产生同样的效果。
-
这将导致WARN org.hibernate.cfg.SettingsFactory - Unrecognized value for"hibernate.hbm2ddl.auto": none(使用版本4.3.11.Final时)。把它留空吧。
-
@ A4L没有土豆!它在SpringBoot 2上崩溃:11:19:43.359 -ERROR [main ] SpringApplication.reportFailure:833 - Application run failed java.lang.IllegalArgumentException: Unrecognized legacy 'hibernate.hbm2ddl.auto' value : potato
-
@pdem这个设置适用于休眠而不是spring boot。 Spring启动使用hibernate,请检查spring boot 2使用哪个版本的hibernate。这个答案基于旧版本的hibernate,请参阅我的第一条评论中的链接。 hibernate的实际稳定版本是5.2。也请回答这个问题。除此之外,此处报告的异常表明这是一个遗留设置,这意味着它有一个替代方案,您应该使用它。
-
@ A4L是的,Spring Boot 2 RC1使用Hibernate 5.1.12.Final。我只是想警告你的技巧似乎不再适用于最新版本,但"无"工作正常。查看SchemaManagementToolCoordinator.interpret的源代码,其中值"none"在遗留值(以"hibernate。"开头)上显式测试,并且jpa值与javax.persistence.schema-generation.scripts.action协调javax.persistence.schema-generation.database.action。感谢你指出了替换hibernate的新javax值。
要明确这一点,应该查看org.hibernate.cfg.SettingsFactory的来源(根据使用的版本,您可能会看到其他内容):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| String autoSchemaExport = properties. getProperty( AvailableSettings. HBM2DDL_AUTO );
if ("validate". equals(autoSchemaExport ) ) {
settings. setAutoValidateSchema( true );
}
else if ("update". equals(autoSchemaExport ) ) {
settings. setAutoUpdateSchema( true );
}
else if ("create". equals(autoSchemaExport ) ) {
settings. setAutoCreateSchema( true );
}
else if ("create-drop". equals( autoSchemaExport ) ) {
settings. setAutoCreateSchema( true );
settings. setAutoDropSchema( true );
}
else if ( !StringHelper. isEmpty( autoSchemaExport ) ) {
LOG. warn("Unrecognized value for "hibernate. hbm2ddl. auto":" + autoSchemaExport );
} |
在org.hibernate.cfg.Settings类中,这些变量初始化为:
1 2 3 4
| private boolean autoCreateSchema;
private boolean autoDropSchema;
private boolean autoUpdateSchema;
private boolean autoValidateSchema; |
所以这些默认为false。
省略hibernate.hbm2ddl.auto设置应该按照建议的hibernate.hbm2ddl.auto = none关闭HBM2DDL_AUTO功能,但在后一种情况下,您会在日志中收到警告。
在hibernate.properties中
1
| hibernate.hbm2ddl.auto=validate |
当然,配置它的地方取决于你配置你的hibernate的方式 - 如果是以编程方式,在那里设置属性。如果是来自hibernate.cfg.xml:
1
| <property name="hibernate.hbm2ddl.auto">validate</property> |
-
这意味着hbm2ddl无法关闭?当hibernate.hbm2ddl.auto在属性文件或hibernate.cfg.xml文件中没有提到时,默认值是多少?
-
stackoverflow.com/questions/438146/…
-
@Alex - 我以为你已经尝试过,并且遇到了问题。请参阅Pascal的回答。"验证"表示hibernate在启动时检查映射是否与数据库一致。
如果输入不受支持的值,它将告诉您支持哪些值:
o.h.b.i.SessionFactoryBuilderImpl : Unrecognized hbm2ddl_auto value : bla. Supported values include 'create', 'create-drop', 'update', 'none' and 'validate'. Ignoring
值none是默认值,正式支持并记录:
https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#configurations-hbmddl
此属性不是必需的。只需从xml文件中完全删除hibernate.hbm2ddl.auto条目即可。