2008-09-17 7 views
1

私は現在Hibernate Tools 3.1を使用しています。私は命名規則とDAOテンプレートをカスタマイズしました。データベース(SQL Server 2005)の初期段階では、私はマッピング、エンティティ、DAO、構成の再構築を担当しています。テーブルをリバースエンジニアリングする必要があるたびに、アイデンティティの列を調整するようなマッピング(* .hbm.xmlファイル)のすべてのカスタマイズは失われ、で使用されるフィールドを選択するとtoStringになります。私はdiff XMLをファイルに作成し、生成されたマッピング(「my related question」を参照)に「マージ」することを検討していましたが、私は疑問に思っていました...これらの厄介な、やむを得ない重要なタスクに対処するためのベストプラクティス/ツールはありますか?Hibernate Toolsと常に変化するデータベース

答えて

2

私は継続的なリバースエンジニアリングを強くお勧めします。リバースエンジニアリングは素晴らしいことですが、変更はhbmとデータベースの両方の変更として管理する必要があります。

私たちは移行を使用してdbの変更を管理し、関連する変更をhbmに含めます。もしHibernateがそれを持っているなら(私はそう信じています)、あなたはhbmの代わりに注釈を見たいと思うかもしれません、それらは維持するのがかなり簡単かもしれません。

+0

あなたと私の最近の誤操作は、RevEngが最も冷たく務めたと私に確信しました。ありがとうございました。 –

1

これは2年半ほど遅れていますが、反対意見を提示します。マッピングファイルに必要なカスタマイズは、hibernate.reveng.xmlファイルまたはカスタムReverseEngineeringStrategyを使用して行うことができます。クラスそのものについては、常にクラスを生成してカスタムコードを含むクラスで拡張する必要があります。

たとえば、com.company.vo.generated.CustomerGeneratedを生成し、com.company.vo.custom.Customerで拡張します。コード生成は生成されたパッケージ内のすべてのクラスを上書きしますが、カスタムパッケージでは決して使用しないでください(必要に応じて空白をコピーしてカスタムディレクトリに貼り付けることができるように、Hibernateツールはこれらのカスタムクラスをターゲットディレクトリに生成できます)。このようにして、カスタムクラスのequals、toStringなどのメソッドをオーバーライドし、再生成時に変更を失うことはありません。また、生成されたコードをSCMにチェックインしないことがベストプラクティスであることにも注意してください。

このサイトには、Maven、Hibernate3プラグイン、およびビルドヘルパープラグインを使用してこれを実現するための素晴らしい例がいくつかあります。これらのほとんどはPascal Thiventの非常に有益な答えを持っています。この方法は私にとって美しく働いています。学習曲線は少しありますが、1つのMavenコマンドでデータベースの変更をアプリに伝えることは素晴らしいことです。

関連する問題