Quali sono i possibili valori della configurazione Hibernate hbm2ddl.auto e cosa fanno

Voglio davvero sapere di più sull'aggiornamento, l'esportazione e i valori che potrebbero essere dati a hibernate.hbm2ddl.auto
Ho bisogno di sapere quando usare l'aggiornamento e quando no? E qual è l'alternativa?

Questi sono cambiamenti che potrebbero avvenire su DB:

  • nuove tabelle
  • nuove colonne in vecchie tabelle
  • colonne eliminate
  • tipo di dati di una colonna cambiato
  • un tipo di colonna ha cambiato i suoi attributi
  • tabelle eliminate
  • i valori di una colonna sono cambiati

In ogni caso qual è la soluzione migliore?

Dalla documentazione della comunità:

hibernate.hbm2ddl.auto Convalida o esporta automaticamente il DDL dello schema nel database quando la SessionFactory viene creata. Con create-drop, lo schema del database sarà abbandonato quando la SessionFactory viene chiusa esplicitamente.

ad esempio validare | aggiornare | creare | creare-drop

Quindi l'elenco delle opzioni possibili sono,

  • validate: convalida lo schema, non apporta modifiche al database.
  • update: aggiorna lo schema.
  • create: crea lo schema, distruggendo i dati precedenti.
  • create-drop: abbandona lo schema quando la SessionFactory viene chiusa esplicitamente, tipicamente quando l'applicazione viene fermata.

Queste opzioni sembrano intese come strumenti per gli sviluppatori e non per facilitare qualsiasi database a livello di produzione, potresti voler dare un'occhiata alla seguente domanda; Hibernate: hbm2ddl.auto=update in production?

Commentari (13)

La proprietà di configurazione si chiama hibernate.hbm2ddl.auto.

Nel nostro ambiente di sviluppo abbiamo impostato hibernate.hbm2ddl.auto=create-drop per eliminare e creare un database pulito ogni volta che facciamo il deploy, in modo che il nostro database sia in uno stato noto.

In teoria, puoi impostare hibernate.hbm2ddl.auto=update per aggiornare il tuo database con le modifiche al tuo modello, ma non mi fiderei di questo su un database di produzione. Una versione precedente della documentazione diceva che questo era sperimentale, almeno; non conosco lo stato attuale.

Quindi, per il nostro database di produzione, non impostiamo hibernate.hbm2ddl.auto - il default è di non apportare modifiche al database. Invece, creiamo manualmente uno script di aggiornamento DDL SQL che applica le modifiche da una versione alla successiva.

Commentari (3)

Io userei liquibase per aggiornare il tuo db. La funzione di aggiornamento dello schema di hibernate è davvero solo ok per uno sviluppatore mentre sta sviluppando nuove funzionalità. In una situazione di produzione, l'aggiornamento del db deve essere gestito con più attenzione.

Commentari (1)