2008-09-17 10 views
1

Ich verwende derzeit Hibernate Tools 3.1; Ich habe Namenskonventionen und DAO-Vorlagen angepasst. Die Datenbank (SQL Server 2005) in der frühen Entwicklungsphase und ich bin verantwortlich für die Wiederherstellung der Mappings, Entitäten, DAOs, Konfiguration, was auch immer. Jedes Mal, wenn ich die Tabellen reverse-engineere, verliere ich jede Anpassung an den Mappings (* .hbm.xml-Dateien) wie die identity Spalten und wähle die Felder gleich und toString. Ich habe erwogen, das diff-XML in eine Datei zu schreiben und diese auf das generierte Mapping "zu verschmelzen" (siehe my related question), aber ich frage mich ... gibt es Best Practices/Tools für den Umgang mit diesen lästigen, unvermeidbaren, kritischen Aufgaben?Hibernate Tools und die sich ständig ändernde Datenbank

Antwort

2

Ich würde dringend empfehlen gegen kontinuierliche Reverse Engineering. Reverse Engineering ist eine einmalige Sache, aber Änderungen müssen als Änderungen sowohl an der HBM als auch an der Datenbank gehandhabt werden.

Wir verwenden Migrationen, um Datenbankänderungen zu verwalten, und wir nehmen die zugehörigen Änderungen in die HBM auf. Wenn Hibernate es hat (ich glaube es tut es), möchten Sie vielleicht in Annotationen statt in einen hbm schauen, sie können ein bisschen einfacher zu pflegen sein.

+0

Sie - und meine jüngsten Missgeschicke - haben mich davon überzeugt, dass RevEng am besten kalt serviert wird. Vielen Dank. –

1

Dies ist zweieinhalb Jahre zu spät, aber ich werde eine abweichende Meinung anbieten. Sie sollten in der Lage sein, Anpassungen an den Mapping-Dateien über die Datei hibernate.reveng.xml oder eine benutzerdefinierte ReverseEngineeringStrategy vorzunehmen. Für die Klassen selbst sollten Sie immer zu Basisklassen generieren und sie mit Klassen erweitern, die benutzerdefinierten Code enthalten.

Zum Beispiel generieren com.company.vo.generated.CustomerGenerated und erweitern Sie mit com.company.vo.custom.Customer. Die Codegenerierung überschreibt alle Klassen im generierten Paket, aber niemals das benutzerdefinierte Paket (obwohl Sie diese benutzerdefinierten Klassen im Zielverzeichnis mithilfe der Hibernate-Tools erstellen können, sodass Sie nach Bedarf Leerzeichen in das benutzerdefinierte Verzeichnis kopieren und einfügen können). Auf diese Weise können Sie Methoden für equals, toString usw. in den benutzerdefinierten Klassen überschreiben und Ihre Änderungen bei der Neugenerierung nicht verlieren. Beachten Sie außerdem, dass die beste Methode darin besteht, generierten Code nicht in SCM einzubuchen.

Es gibt einige großartige Beispiele auf dieser Seite, wie man dies mit Maven, dem Hibernate3-Plugin und dem Build-Helfer-Plugin erreicht. Die meisten haben sehr hilfreiche Antworten von Pascal Thivent. Diese Methode funktioniert wunderbar für mich, und obwohl es ein bisschen eine Lernkurve gibt, ist es eine wunderbare Sache, Datenbankänderungen mit einem einzigen Maven-Befehl an die App weitergeben zu können.

Verwandte Themen