0

Spring/Hibernateコンボで複数のデータベース「モデル」を使用するために受け入れられている方法は何ですか?

私はSpring/Hibernateの専門家ではないので、頭を悩ませている問題について助けていただければ幸いです。

私たちは、これまで最初の顧客の仕様に合わせて構築された Web プロジェクトを開発しています。すべてのデータベース テーブルは POJO にマップされ、Hibernate Annotations を使用します。簡単に言うと、このプロジェクトは、エンド ユーザーがフロント エンド経由でデータベース情報を更新できるようにする CRUD アプリケーションです。

新しい顧客をサポートする必要がありますが、この顧客の仕様は少し異なります。多くのテーブルの列とデータ型が変更されます。

多数の NULL 列でデータベースが肥大化するため、1 つのテーブルに結合したくありません (一部のテーブルでは、顧客ごとに 10 個以上の一意の列が存在します)。

JSON との間で変換するだけでフロント エンドは十分に簡単に処理でき、フロント エンドはゼロから顧客ごとに実装されています。しかし、バックエンドはもう少し複雑です。

実行時に 2 つのテーブルをオーバーライドするプロトタイプを試しました。対応する 2 つのモデル クラスをインターフェイスに変換し、Spring 構成を介してロードされた顧客ごとの具体的なクラスを実装しました。

package com.mycompany.generic.model;
public interface Product 

その後

package com.mycompany.customera.model;
@Table(name="products")
public class CustomerAProduct implements Properties {
  String colour;
  int weight;
}

また

package com.mycompany.customerb.model;
@Table(name="products")
public class CustomerBProduct implements Properties {
  String colour;
  int volume;
  Double price;
}

..ここで、Spring はランタイム オプションとして、構成に応じてcom.mycompany.customeraまたはcustomerbをロードし、新しい POJO に作用する顧客固有の検証/サービス クラスをロードします。基になる列が異なる可能性があることがわかります。

ただし、これを実装することをためらっています..

  • ほとんどすべてのモデル クラスは、異なるものだけでなく、顧客ごとに変換および実装する必要があります。これは、モデル クラス内に多数の結合 (OneToMany など) があるためです。Hibernate ではインターフェイスに結合できません (例: HHH-4338 ) 。
  • クラスの新しいインスタンスを生成するには、ある種の util/factory が必要です。以前は新しいプロパティを作成していた場所で、 new CustomerAProperties()またはnew CustomerBProperties( ) のどちらを使用するかわからないためです (同じ理由で、TargetEntity を使用してコードで設定できない .class ファイルが必要なため、上記の問題を解決します)

これらはかなり大きな欠点のように思われるので、より良い方法を研究しようとしています. Mavenを介して顧客ごとに構築できますが、ローカルで開発している間にEclipseを壊さない方法でこれを実装する方法がわかりません..

または、私が気付いていない他の方法はありますか?

何を研究するかなどについての提案や指針を事前に感謝します。

4

1 に答える 1

0

または、私が気付いていない他の方法はありますか?

注釈ベースのマッピングから xml マッピングに切り替えることができない理由はありますか?

各顧客は、一連の XML マッピング ファイルを取得します。モデルが顧客間で本当に異なる場合にのみ、サブクラス化する必要があります。

于 2012-10-22T17:09:13.173 に答える