Ho un progetto molto utilizzato su cui sto lavorando attualmente in fase di aggiornamento. Esistono diversi luoghi in cui è possibile installare questo progetto e in futuro non è sicuro quale versione venga utilizzata dove e in quale versione si possa essere aggiornati in futuro. In questo momento sono tutti uguali, però.Creazione query query HSQL dalla classe
Il mio problema deriva dal fatto che potrebbero esserci molte modifiche alle classi di entità di ibernazione, e deve essere facile da aggiornare a una versione più recente senza problemi e senza perdita di contenuto del database. Basta sostituire WAR e avviare e dovrebbe migrare se stesso.
A mia conoscenza, Hibernate non modifica le tabelle a meno che non sia hibernate.hbm2ddl.auto = creare, ma che in realtà elimina tutti i dati?
In questo momento, quando il contesto Spring è completamente caricato, esegue un bean che migrerà il database alla versione corrente passando da tutte le modifiche da versionX a versionY (quale versione precedentemente era salvata nel database) e modifica manualmente la tabella.
Non è più problemi a fare un paio di hard-coded ALTER TABLE per aggiungere alcune colonne, ma quando si tratta di aggiungere nuove tabelle complete, si sente stupido dover scrivere tutto ciò che ...
Quindi il mio question (s) è questo:
esiste un modo per inviare una classe di entità e di un dialetto di Hibernate codice da qualche parte, e tornare una query SQL valida per la creazione di un tavolo?
E ancora meglio, in qualche modo creare una stringa SQL per aggiungere una colonna a una tabella, dialetto-sicuro?
Spero che questa non è una domanda stupida, e non ho perso una cosa ovvia quando si tratta di Hibernate ...
Ok, ho deciso che questa sarebbe la risposta migliore. Ho ancora delle riserve su Liquibase come dipendenza o sulla mia Spring + Hibernate + Annotations, ma ha fatto un ottimo lavoro creando query SQL hardcoded che posso usare per la mia soluzione personalizzata. Grazie. – Stmated
Controlla questa risposta da Dipesh: http://stackoverflow.com/a/12259980/433789 – sdouglass
Lasciare che Hibernate faccia il proprio aggiornamento automatico funzioni bene in casi semplici come l'aggiunta di nuove colonne nullable, ma non può far fronte a più complessi migrazioni come la ridenominazione o la rimozione di colonne, la modifica dei tipi, ecc. Immaginate una situazione in cui state aggiungendo una nuova colonna il cui valore deve essere calcolato in base ai valori nelle colonne esistenti (piuttosto che avere un default statico che funzioni per tutte le righe esistenti). –