0

Hibernate をオブジェクト リレーショナル マッピング ツールとして使用して、Java オブジェクトをデータベースに永続化するアプリケーションを開発およびサポートしています。残念ながら、OurApp 1.0 と OurApp 2.0 の間で、オブジェクト モデルとデータベース スキーマにいくつかの変更がありました。そのため、OurApp 1.0 を使用している顧客のデータベースから、OurApp 2.0 に一致するスキーマを持つ新しいデータベースにデータを移行する自動ツールを作成したいと考えています。

各 Java クラスの 2 つのバージョンを持つツールを作成することを考えていました。たとえば、OurApp 1.0 に表示される MyObject クラスに一致する Java クラス MyObject_1_0 と、OurApp 2.0 に表示される MyObject クラスに一致する MyObject_2_0 があるとします。次に、MyObject_1_0 を MyObject_2_0 に変換する方法を知っているコードを記述します。

ただし、これは私が以前に行ったことではないため、これが最善のアプローチであるかどうかを知りたいです。ベスト プラクティスや一般的な落とし穴に関する文献や調査を確認できれば幸いです。これを行うための最も効果的な方法を研究する際に役立つと思われる本や記事を誰か推薦してもらえますか?

ありがとう!

4

2 に答える 2

2

各 Java クラスの 2 つのバージョンを持つツールを作成することを考えていました。たとえば、OurApp 1.0 に表示される MyObject クラスに一致する Java クラス MyObject_1_0 と、OurApp 2.0 に表示される MyObject クラスに一致する MyObject_2_0 があるとします。次に、MyObject_1_0 を MyObject_2_0 に変換する方法を知っているコードを記述します。

Peter が提案したように、代わりにデータベース移行ツールを使用することを実際に検討します。これははるかに効率的であり、後で説明するように、最終的には作業も少なくなるはずです。そして、ターゲットデータベースはあなたの管理下にないので、 XMLを使用するliquibaseのように、データベースに依存しない方法で変更を記述できるものを探します。

Liquibaseを支持するもう 1 つの議論は、シナリオのキラー機能であるHibernate 統合を提供することです。エンティティ (XML または注釈) の新しいマッピングを古いデータベースと比較することにより、移行スクリプトを生成できます。結果に微調整が必​​要な場合でも、これにより作業が大幅に簡素化されます。ドキュメントから:

Hibernate 統合 (1.6 以降)

LiquiBase-Hibernate は、Hibernate のhbm2ddl 機能を置き換えるものです。

hbm2ddl に対する LiquiBase の利点

hbm2ddl は一般的に機能しますが、基本的にはデータベース差分ツールであるため、データベース差分ツールに関連するすべての問題があります。

LiquiBase-Hibernate 統合は、現在の Hibernate マッピングに必要なデータベースの変更を変更ログ ファイルに記録し、実行前に必要に応じて検査および変更できます。開発プロセス

LiquiBase で Hibernate を使用する手順は、次のとおりです。

  1. Hibernate でマップされたオブジェクトに必要な変更を加える
  2. Hibernate 構成ファイルと開発データベースの間で diffChangeLog を実行します (以下の例を参照)。
  3. 新しい変更セットの検査と変更 (必要な場合)
  4. 新しい変更でデータベースを更新します

また、サポートされているすべてのデータベースに SQL スクリプトを提供するか、単にツールを一部の Ant ビルドにラップすることができます。

これは、開発プロセスにそのようなツールを採用する機会でもあります。

于 2010-08-28T00:52:39.983 に答える
0

最初にdbMigrateliquiBaseを確認することをお勧めします。また、おそらくdbMaintainも確認することをお勧めします。

これらのライブラリ、ツールは、スキーマの移行を行う目的で構築されています。彼らは異なるアプローチを使用します。

それらはソリューションの一部である場合もあれば、それ自体で十分である場合もあります。

于 2010-08-27T17:26:37.763 に答える