Как отключить hbm2ddl?

Я не мог найти ссылку на то, как отключить hbm2ddl.

Ответы

Ответ 1

Просто опуская hibernate.hbm2ddl.auto по умолчанию Hibernate ничего не делает. Из справочной документации:

1.1.4. Конфигурация гибернации

Включена опция 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 файла.