Domanda

Attualmente sto utilizzando Hibernate Tools 3.1;Ho personalizzato la convenzione di denominazione e i modelli DAO.Il database (SQL Server 2005) è nella fase iniziale di sviluppo e sono incaricato di ricostruire mappature, entità, DAO, configurazione, qualunque cosa.Ogni volta devo fare il reverse engineering delle tabelle e quindi perdo ogni personalizzazione che ho fatto sulle mappature (file *.hbm.xml) come la regolazione dei identità colonne, selezionando i campi utilizzati in equivale E accordare.Stavo pensando di scrivere il diff XML in un file e di "fonderlo" nella mappatura generata (vedi la mia domanda correlata) ma mi chiedevo...esiste qualche migliore pratica/strumento per affrontare questi compiti fastidiosi, inevitabili e critici?

È stato utile?

Soluzione

Consiglio vivamente di evitare il reverse engineering continuo.Il reverse engineering è un'ottima cosa una tantum, ma le modifiche devono essere gestite come modifiche sia all'hbm che al database.

Utilizziamo le migrazioni per gestire le modifiche del database e includiamo le modifiche associate nell'hbm.Se Hibernate ce l'ha (credo che lo faccia) potresti voler esaminare le annotazioni invece di un hbm, possono essere un po' più facili da mantenere.

Altri suggerimenti

Questo è in ritardo di due anni e mezzo, ma offrirò un'opinione dissenziente.Dovresti essere in grado di apportare tutte le personalizzazioni necessarie ai file di mappatura tramite il file hibernate.reveng.xml o una ReverseEngineeringStrategy personalizzata.Per le classi stesse, dovresti sempre generare classi di base ed estenderle con classi contenenti codice personalizzato.

Ad esempio, genera com.company.vo.generated.CustomerGenerated ed estendilo con com.company.vo.custom.Customer.La generazione del codice dovrebbe sovrascrivere tutte le classi nel pacchetto generato ma mai nel pacchetto personalizzato (sebbene sia possibile fare in modo che Hibernate Tools generi queste classi personalizzate nella directory di destinazione in modo da poter copiare e incollare spazi vuoti nella directory personalizzata secondo necessità).In questo modo puoi sovrascrivere i metodi per equals, toString, ecc. nelle classi personalizzate e non perdere le modifiche durante la rigenerazione.Tieni inoltre presente che la procedura consigliata è non archiviare il codice generato in SCM.

Ci sono alcuni ottimi esempi su questo sito di come ottenere questo risultato utilizzando Maven, il plugin Hibernate3 e il plugin build helper.La maggior parte di questi hanno risposte molto utili di Pascal Thivent.Questo metodo funziona magnificamente per me e, sebbene ci sia un po' di curva di apprendimento, è meraviglioso poter propagare le modifiche del database all'app con un singolo comando Maven.

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