User クラスに依存するクラス Address があるとします。アドレスはコンポーネント型です。Address クラスには、Country などの他のエンティティへの参照を含めることができます。
もし、そうなら?
住所と国で4つの関係すべてが可能ですか
一対一
多対一
多対多
一対多
可能であれば、JPAアノテーションで説明してください
[更新] コンポーネントは「スタンドアロン値」または「値オブジェクト」です。アウトバウンド関係、および仕様とのインバウンド関係が部分的にサポートされていますmappedBy
が、「コンポーネント」はファースト クラスの「エンティティ」ではありません。
多くの永続化機能 (クエリ、キャッシュ、ロック、一括読み込み、およびセッション制御機能) はすべて、主に「エンティティ」レベルで設計されています。特定のポイントを超えると、「コンポーネント」でできることには制限があります..そのような制限に遭遇するかどうかは、どれだけ深く行くかによって異なります.
しかし、実際にシナリオをモデル化するCountry
と、外部キーを持つテーブルの有用性は制限されます。したがって、おそらく最も正しい設計は、Address.Country を非正規化して、オートコンプリートでサポートすることです。
これが好ましいアプローチである理由:
国が名前や国境を変更する場合、通常は「相対的に正規化された」方法ではありません。たとえば、ユーゴスラビア -> クロアチア、セルビア、モンテネグロ。スーダン -> スーダン、南スーダン。争われている国境は移動し、国は分裂しますが、実際には、特定された 1 つの国の名前を変更できることは一般的ではありません。
人と比較してください: 人は安定したアイデンティティを持ち、名前/住所を変更できますが、国にはこれが非常に便利な方法ではありません。