"プロモーション"のオブジェクトモデルをマップしようとしています。すなわち、顧客がサインアップ中にプロモーションコードを入力する。Hibernateでは、同じテーブル内にサブベースのテーブルと<map>を混在させることはできますか?
異なるプロモーションコードには、異なる種類の「特典」があります。つまり、お客様に提供するものです。 例:プロモーションコードXYZ123は、顧客に自分のアカウントで無料の分を提供しますが、別のプロモーションコードは、サインアップ時にユーザーが選択できるさまざまなサブスクリプションプランからさまざまな割引を提供します。
私のドメインモデルでは、共通プロパティを持つ抽象スーパークラスを使用して、さまざまなタイプのメリットをサブクラスとしてモデル化しました。いくつかのタイプのメリットでは異なるプロパティが必要になるため、異なるタイプをサブクラスとしてモデル化することを選択しました。
public abstract class Benefit {
//getters/setters for common attributes
}
public class FreeMinutesBenefit extends Benefit {
public int getFreeMinutes() {...}
public void setFreeMinutes(int minutes} {...}
}
public class PriceDiscountBenefit extends Benefit {
public Map<Plan, BigDecimal> getDiscountMap() {...}
public void setDiscountMap(Map<Plan, BigDecimal> map) {...}
}
ラフSQLスキーマ:
-- Parent table, maps promotion to benefits
create table Promo_Benefit (
map_id integer auto-generated PRIMARY KEY,
promo_id integer references PROMOTION(promo_id),
type_id integer references BENEFIT_TYPES(type_id)
);
create table BenefitDetails_FreeMinutes (
map_id integer PRIMARY KEY,
minutes integer not null,
FOREIGN KEY (map_id) references Promo_Benefit(map_id)
);
create table BenefitDetails_PriceDiscount (
map_id integer references Promo_Benefit(map_id),
plan_id integer references Plans(plan_id),
reduced_price numeric not null,
PRIMARY KEY (map_id, plan_id)
FOREIGN KEY (map_id) references Promo_Benefit(map_id)
);
私は成功した私のHibernateマッピングファイル内の各サブクラスの基本的な性質をマッピングすることができるよ、私は関連をマッピングする方法を考え出すのトラブルを抱えていますPriceDiscountBenefitサブクラスとPlanクラスの間の
サブクラステーブル(BenefitDetails_PriceDiscount)のプライマリキーが単にmap_id
カラムではない - つまり、このサブクラステーブルの複数の行が単一のPriceDiscountBenefitエンティティを形成するからです。私が見ることができるように、Hibernateでのtable-per-subclassサポートは、サブクラステーブル内の単一の行が親テーブル内の単一の行にマップされるインスタンスのためのものであると思われます - <map>
は、キー/値が含まれています。
私はこれを完全に間違ってマッピングしていますか?私はテーブルごとにサブクラスのパターンを屠殺しているので、私は問題を抱えているかどうかはわかりません。
'Promo_Benefit'テーブルから判断すると、あなたは1対多の関係を持って推進クラスを持っていますこれは本当ですか? – ChssPly76