Domanda

<property name="hibernate.hbm2ddl.auto">update</property>

posso creare il mio schema del database, si aggiunge automaticamente le proprietà, vincolo, chiave ecc ... Ma per quanto riguarda aggiornare lo schema del database? Se rimuovo alcuni beni dai miei soggetti, Hibernate non lo rimuove, o se cambio qualche vincolo, Hibernate non toccare vincolo già creato ...

Quindi, c'è un modo per rendere davvero ibernazione aggiornare lo schema del database?

Grazie.

È stato utile?

Soluzione

Abbiamo creato uno strumento per la nostra che crea le gocce necessarie di colonne di database e le tabelle e aggiungere queste gocce al SQL generato per gli aggiornamenti del database. Ma abbiamo dovuto aggiungere alcuni extra alla generazione SchemaUpdate per farlo funzionare:

  • Abbiamo dovuto aggiungere i controlli per le proprietà non-nulli. Questo include l'emissione di un'istruzione UPDATE sui dati a valori nulli eleminate ove possibile, che porta al prossimo punto di valori di default.
  • Abbiamo dovuto aggiungere i controlli per i valori di default delle colonne. I valori predefiniti vengono dedotte dalla nullability di una colonna e il suo tipo. Primitive sono sempre inizializzati a zero o falso, enumerazioni non-null al suo primo valore di enumerazione, ma per altri oggetti lo script deve essere modificata manualmente.
  • Abbiamo anche aggiunto il supporto per il ridimensionamento colonne varchar, perché ci sono stati casi in cui la lunghezza della colonna database e il @Column(length) differivano.

Ma per mettere tutto insieme, uno strumento completo non può essere creato in questo modo, perché ciò che se una colonna viene rinominato in codice? Che cosa succede se il tipo cambia in un modo che non automaticamente convertibili (bool ad oggi?). Se non si ha accesso ad una storia refactoring, non si può sempre cambiamenti propagarsi.

Altri suggerimenti

Al momento stiamo utilizzando liquibase fare cambiamenti automatici del database in modo indipendente dal database. Può essere possibile estrarre liquibase comandi direttamente dal annotazioni Hibernate, ma non credo che un tale strumento esiste quindi probabilmente dovrete farlo da soli.

No non c'è. hbm2ddl non è destinato a fare una gestione completa delle tue migrazioni schema. E 'meglio se lo si utilizza solo per le modifiche additivo schema e la mano di modifica (gli script generati) per tutto il resto.

Alcuni progetti che potrebbero essere utili per gestire le modifiche dello schema:

Un'altra risorsa che si può trovare utile è la funzione di confronto nel sito Flyway (Ci sono altri progetti correlati ci menzionato).

Hibernate fornisce una classe chiamata SchemaUpdate che è in grado di sincronizzare una serie di mappature Hibernate con uno schema di database

Vecchio palo , ma lasciate il know comunità se è buono:)

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