Как отключить hbm2ddl?
Я не мог найти ссылку на то, как отключить hbm2ddl.
Ответы
Ответ 1
Просто опуская hibernate.hbm2ddl.auto
по умолчанию Hibernate ничего не делает. Из справочной документации:
Включена опция hbm2ddl.auto
автоматическая генерация базы данных схемы непосредственно в базу данных. Это также можно отключить, удалив опцию конфигурации, или перенаправлено в файл с помощью задачи SchemaExport Ant.
Настройка hbm2ddl.auto
на none
(недокументированная) может вызвать предупреждение, например: org.hibernate.cfg.SettingsFactory - Unrecognized value for "hibernate.hbm2ddl.auto": none
Ответ 2
Вы можете отключить его:
hibernate.hbm2ddl.auto=none
Это недокументированное, но бесценное!
Ответ 3
Чтобы понять это, нужно изучить источник org.hibernate.cfg.SettingsFactory
(вы можете увидеть что-то еще в зависимости от используемой версии):
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
эти переменные инициализируются как:
private boolean autoCreateSchema;
private boolean autoDropSchema;
private boolean autoUpdateSchema;
private boolean autoValidateSchema;
поэтому они по умолчанию имеют значение false.
Опускание параметра hibernate.hbm2ddl.auto
должно отключить функциональность HBM2DDL_AUTO
, как предложено hibernate.hbm2ddl.auto = none
, но в последнем случае вы получите предупреждение в журнале.
Ответ 4
в hibernate.properties
hibernate.hbm2ddl.auto=validate
Конечно, место для его настройки зависит от того, как вы настроите свой спящий режим - если он программно, установите там свойство. Если это из hibernate.cfg.xml:
<property name="hibernate.hbm2ddl.auto">validate</property>
Ответ 5
Если вы введете неподдерживаемое значение, он скажет вам, какие из них поддерживаются:
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
Ответ 6
Это свойство не обязательно. Просто полностью удалите запись hibernate.hbm2ddl.auto
из XML файла.