0

Hibernate を使用して、ある固定ドメイン タイプ A と別のドメイン タイプ B の間に 1 対 1 の関係を実装しようとしています。そのタイプは、特定のインターフェイスを実装する任意のタイプです。

状況:

システムには 3 つの異なるドメイン タイプがあります。インターフェース FlagSubscriber を実装する Country、Warehouse、および Store。

FlagSubscribers with Flags に参加したいと思います。各フラグは、0 または 1 つの FlagSubscriber とペアにすることができます。

実装:

データベースには、Country、Warehouse、Store、Flag のテーブルがあり、それぞれに ID 列と、特定の属性のさまざまな列があります。Flags と FlagSubscribers をペアにするために、次のようなリンク テーブルを作成しました。

  • flag_id
  • Subscriber_id
  • Subscriber_type

id フィールドは自明です。subscriber_type は、subscriber_id が国、倉庫、またはストアに関連するかどうかを決定するテキスト フィールドです。

質問:

Hibernate アノテーションを使用して、Flag クラスで FlagSubscribers をマップする方法を Hibernate に指示するにはどうすればよいですか?

弁別子を使用する必要があると思いますが、特定のケースでこれを行う方法、または可能かどうかさえ正確にはわかりません。

例、提案、またはアイデアへのポインタは大歓迎です!

4

2 に答える 2

1

@Anyおそらく、注釈を使用してマップできますが、リンク テーブルでどのように再生されるかはわかりません。Flagただし、とは 1 対 1 の関係であるため、FlagSubscriberリンク テーブルなしでマッピングできます。

EntityManagerまた、Hibernate がインターフェイス経由で使用されている場合、Hibernate 3.5 以降は機能しないことに注意してください。

于 2011-04-21T11:00:15.223 に答える
0

私は別のセットアップに行きます:

インターフェース FlagSubscriber はありませんが、Store、Warehouse、および Country の 3 つのサブクラスを持つ (抽象) クラスです。すべての一般的なフィールドは FlagSubscriber に移動できますが、これは限定される可能性があると思います

@ManyToOne プライベート フラグ フラグ。

次に、subscriber_id とテーブル フラグへの外部キーを含む別のテーブル FlagSubscriber を持つことを選択できます。FlagSubscriber の各サブクラスにも、同じ ID を持つ独自のテーブルがあります。ハイバネートはすべてのサブクラスと結合して、実際にどのタイプ(サブクラス)であるかを知るため、識別子は必要ありません(IDでは成功することしかできません.

于 2011-04-21T11:04:39.547 に答える