Ho un'applicazione in cui Hibernate crea tutti i miei schemi di tabelle ogni volta che l'applicazione viene eseguita su una macchina per la prima volta. Funziona beneCombina la creazione automatica dello schema di Hibernate e il controllo delle versioni del database
Ora ero però chiedendo se Hibernate ha una sorta di meccanismo per mantenere il database sotto controllo di versione, vale a dire si Hibernate sa come migrare uno schema a un altro quando si esegue una versione diversa della mia applicazione e Hibernate trova un database diverso schema da una versione precedente presente? In qualche modo penso che ciò dovrebbe essere possibile, considerando che Hibernate può leggere lo schema esistente e potrebbe confrontare lo schema con la descrizione della mappatura. Tuttavia, non saprei come dire a Hibernate di migrare i vecchi dati come quando si creano script di modifica con ad es. Liquibase/Flyway.
Probabilmente non ho cercato su google le cose giuste poiché Hibernate e il controllo delle versioni ti mostreranno molti successi sul controllo e sul controllo delle versioni, ma sto pensando più in termini di versioni di Liquibase/Flyway. Non ho mai preso in considerazione entrambi, ma poiché Hibernate non crea script di aggiornamento ma manipola direttamente il database, non saprei come far funzionare entrambi.
Questa è la prima volta che Hibernate crea il mio schema invece di scrivere i miei script. Lo faccio per fare uso di Hibernate Envers ciò che rende la creazione di script manuale estremamente noiosa. Forse mi manca qualcosa di ovvio. Grazie per qualsiasi input su questo argomento!
Aggiornamento: Ho avuto modo di parlare con lo sviluppatore di Flyway oggi e mi ha detto che non avrebbe saputo di una buona soluzione. Forse non c'è niente?
Hibernate ha un valore hbm2ddl.auto di "aggiornamento" che proverà a farlo ma non è affidabile. Nella mia esperienza con l'ibernazione, questi aggiornamenti dello schema dovrebbero sempre essere gestiti da script SQL di aggiornamento dello schema scritti manualmente.In genere, l'utente db che l'app sta utilizzando non dovrebbe avere i privilegi di creazione/rilascio, anche se questo potrebbe non essere applicabile nel tuo caso. – Taylor
A mio parere, la scrittura dello schema, alla fine, è una sorta di duplicazione del codice poiché rispecchia similmente un modello di dominio già descritto implementando i miei oggetti Java. Di solito, questa duplicazione non è così costosa, ma con Envers lo è. Quindi vorrei avere una soluzione a questo. In quale contesto hai riscontrato che hbm2dll.auto non è sufficiente. Potrebbe essere un ottimo punto di ingresso per implementare un migratore Flyway personalizzato. –
Quasi ogni contesto. Qualsiasi riorganizzazione di colonne esistenti o qualsiasi modifica diversa da "aggiungi colonna con un singolo valore predefinito" o "rilascia questa colonna" è oltre la capacità di ibernazione da aggiornare. – Taylor