0

いくつかのエンティティとそれらの間の関係を定義する EJB アプリケーションがあるとします。DB スキーマはエンティティから簡単に作成できると考えました。これでアプリは動作しますが、しばらくすると関係を変更する必要が生じます。たとえば、1 対 1 を 1 対多にする必要があります。DB をアップグレードして、古いデータを失わずに変更できますか?

4

3 に答える 3

1

もちろんできます!あなたがしなければならないことは、多くの異なる要因に正確に依存します:あなたはどのORMを使用しますか?どのEJBコンテナですか?どのRDBMS?

通常、次の手順が適用されます。

  1. アプリケーションを停止します
  2. データベースをバックアップする
  3. データベーススキーマを編集します
  4. アプリケーションをアンデプロイします
  5. アプリケーションを新しいスキーマに適合させます。ORM-Configurationを編集することを忘れないでください!
  6. アプリケーションを再デプロイします
  7. アプリケーションを再起動します

より詳細な(そして役立つ)答えを得るには、現在の状況、達成したいこと、変更しようとしていることについて、より多くの詳細を提供する必要があります。

于 2008-10-30T21:56:54.173 に答える
1

コンテナーにエンティティからスキーマを自動生成させているように聞こえるので、独自の ORM を作成する必要がなくなります (なぜですか?) もしそうなら、Apache プロジェクトに DdlUtils と呼ばれる気の利いたツールがあります。役に立つかもしれません。

最初に古いデータベースをバックアップしてから、更新したアプリを再デプロイして、新しいスキーマで空のデータベースを生成します。次に、DdlUtils を使用して 2 つのデータベースに接続し、古いデータベースを新しいスキーマに移行するために必要な SQL を生成して、データを保持することができます。

テーブルや列を追加または削除するだけの場合は、魅力的に機能します。列名の変更などを行うと、どれだけうまく機能するかわかりません。その場合、SQL を手動で編集する必要がある場合があります。

于 2008-11-15T15:54:50.240 に答える
1

Hibernate を JPA 実装として使用する場合、プロパティ hibernate.hbm2ddl.auto を渡すことができます。スキーマを手動で変更する場合は、「検証」に設定することを検討する必要があります。また、手動で変更せずに単純なものを処理する「更新」を試すこともできます。

于 2008-11-02T19:53:44.340 に答える