web-dev-qa-db-fra.com

Comment désactiver hbm2ddl?

Je ne pouvais pas trouver une référence sur la façon de désactiver hbm2ddl.

51
Alex

En omettant simplement hibernate.hbm2ddl.auto, Hibernate ne fait rien par défaut. De la documentation de référence:

1.1.4. Configuration Hibernate

L'option hbm2ddl.auto est activée génération automatique de base de données schémas directement dans la base de données . Cela peut également être désactivé en supprimant l'option de configuration, ou redirigé vers un fichier avec l'aide de la tâche Ant SchemaExport.

Définir hbm2ddl.auto sur none (non documenté) peut générer un avertissement, tel que: org.hibernate.cfg.SettingsFactory - Unrecognized value for "hibernate.hbm2ddl.auto": none

73
Pascal Thivent

Vous pouvez l'éteindre en:

hibernate.hbm2ddl.auto=none

C'est sans papiers mais sans prix!

32

Pour que celui-ci soit clair, il faut regarder dans la source de org.hibernate.cfg.SettingsFactory (vous pouvez voir quelque chose d'autre en fonction de la version utilisée):

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 );
}

Dans la classe org.hibernate.cfg.Settings, ces variables sont initialisées comme suit:

private boolean autoCreateSchema;
private boolean autoDropSchema;
private boolean autoUpdateSchema;
private boolean autoValidateSchema;

alors ces valeurs par défaut sont false.

L'omission du paramètre hibernate.hbm2ddl.auto devrait désactiver la fonctionnalité HBM2DDL_AUTO comme le suggère hibernate.hbm2ddl.auto = none, mais dans ce dernier cas, un avertissement apparaît dans le journal.

10
Andres Saaremõts

dans hibernate.properties

hibernate.hbm2ddl.auto=validate

Bien sûr, l'emplacement pour le configurer dépend de la façon dont vous configurez votre veille prolongée. Si c'est programmé, définissez la propriété à cet endroit. S'il s'agit de hibernate.cfg.xml:

<property name="hibernate.hbm2ddl.auto">validate</property>
4
Bozho

Si vous entrez une valeur non prise en charge, elle vous indiquera celles qui sont prises en charge: o.h.b.i.SessionFactoryBuilderImpl : Unrecognized hbm2ddl_auto value : bla. Supported values include 'create', 'create-drop', 'update', 'none' and 'validate'. Ignoring

Et la valeur none est la valeur par défaut, elle est officiellement supportée et documentée: https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#configurations-hbmddl

2
jstadler

Cette propriété n'est pas obligatoire. Supprimez simplement l'entrée hibernate.hbm2ddl.auto du fichier xml.

0
gdrt