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を壊さない方法でこれを実装する方法がわかりません..
または、私が気付いていない他の方法はありますか?
何を研究するかなどについての提案や指針を事前に感謝します。