0

プロジェクトで一連のテーブル/クラスをモデル化する際に助けが必要です。これらのテーブルの休止状態のマッピングを行う方法についても助けが必要です。私のプロジェクトには次のテーブルがあります。

  1. 組織
  2. コンタクト
  3. 住所

person テーブルには、1 つ以上の住所を含めることができます。組織と連絡先は、アドレスを 1 つだけ持つことができます。そのため、テーブル間の関係を確立するために次の列を追加しました。

Address テーブルには PersonId があります [1 人の Person が複数のアドレスを持つことができるため]。

Organization および Contact テーブルには AddressId があります [これらのテーブルは 1 つのアドレスしか持てないため]。

  1. これらのテーブル用に作成する必要がある Java クラスを知りたいです。現在、Person、Address、Organization、および Contact クラスがあります。Address クラスを Person、Organization、Contact クラスにリンクする方法がわかりません。
  2. Address をコンポーネントと見なすべきか、エンティティと見なすべきかを知りたいです。また、xml マッピング アドレスを作成する方法は、コンポーネントと見なされます。
  3. Address テーブルの PersonId には、Organization および Contact 用に作成された Address レコードの null 値が含まれる場合があります。個人のアドレスのリストを格納するために、別のテーブル [たとえば Person_Address] を作成しても問題ありません。しかし、このリンク テーブルを使用すると、Person テーブルと Address テーブルの間の多対多の関係を提供できます。この場合、1 対多の関係を強制するにはどうすればよいですか。
4

1 に答える 1

1

私はあなたが3で提案することに行きます.PersonクラスのアドレスのセットでOneToMany関係を使用することにより、中間テーブルが自動的に作成され、アドレスIDに一意の制約があると思います.

編集: アドレス クラスに対応する多対 1 注釈を追加し、1 対多注釈をそのフィールドにマップする場合にのみ、アドレス テーブルで参照を取得します。しかし、そうしないと、余分なクラスを作成しなくても、1 対多の関係があっても Person_Address テーブルを取得できます。

プレーン Java で行うように、クラスをモデル化する必要があります。つまり、Person はアドレスのセットを持ち、他の人は 1 つだけ持ち、Address クラスは他のアドレスを認識しません。

次に、Person クラスに @OneToMany アノテーションを追加し、他のクラスに @OneToOne クラスを追加します。または、それを orm.xml に入れますが、メンテナンスには注釈の方がはるかに優れています。

Component/Embedable と Entity については、エンティティが最も単純で制限がないため、エンティティをお勧めします。一度に多くの概念に慣れず、幹線道路に固執してください。

于 2012-04-04T17:16:43.740 に答える