Domanda

Non ho potuto trovare un riferimento su come passare hbm2ddl off.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top