Come disattivare hbm2ddl?
Domanda
Non ho potuto trovare un riferimento su come passare hbm2ddl off.
Soluzione
Proprio omesso l'impostazione predefinita hibernate.hbm2ddl.auto
di Hibernate non fare nulla. Dalla documentazione di riferimento:
1.1.4. Hibernate configurazione
L'opzione
hbm2ddl.auto
accende generazione automatica dei dati schemi direttamente nel database. Questo può anche essere disattivata rimuovendo l'opzione di configurazione , o reindirizzato a un file con l'aiuto del compito SchemaExport Ant.
Impostazione hbm2ddl.auto
a none
(senza documenti) potrebbe generare un avviso, come ad esempio: org.hibernate.cfg.SettingsFactory - Unrecognized value for "hibernate.hbm2ddl.auto": none
Altri suggerimenti
È possibile spegnerlo:
hibernate.hbm2ddl.auto=none
E 'senza documenti ma ha prezzo!
Per ottenere questo chiaro, si dovrebbe esaminare la fonte di org.hibernate.cfg.SettingsFactory
(si potrebbe vedere qualcosa di diverso a seconda della versione utilizzata):
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 );
}
Nella classe org.hibernate.cfg.Settings
queste variabili vengono inizializzate come:
private boolean autoCreateSchema;
private boolean autoDropSchema;
private boolean autoUpdateSchema;
private boolean autoValidateSchema;
in modo da questi predefinito false.
Tralasciando l'impostazione hibernate.hbm2ddl.auto
dovrebbe spegnere la funzionalità HBM2DDL_AUTO
come sarebbe suggerito hibernate.hbm2ddl.auto = none
, ma in quest'ultimo caso si ottiene un avviso nel registro.
in hibernate.properties
hibernate.hbm2ddl.auto=validate
Naturalmente, il posto giusto per configurarlo dipende dal modo in cui si configura il hibernate - se è programatically, impostare la proprietà lì. Se proviene da hibernate.cfg.xml:
<property name="hibernate.hbm2ddl.auto">validate</property>
Se si immette un valore non supportato vi dirà quali sono supportati:
o.h.b.i.SessionFactoryBuilderImpl : Unrecognized hbm2ddl_auto value : bla. Supported values include 'create', 'create-drop', 'update', 'none' and 'validate'. Ignoring
E il valore none
è il default, è ufficialmente supportato e documentati:
https://docs.jboss.org/ hibernate / orm / corrente / userguide / html_single / Hibernate_User_Guide.html # configurazioni-hbmddl
Questa proprietà non è richiesto. Basta eliminare la voce hibernate.hbm2ddl.auto
completamente dal file XML.