2

PersonクラスとAddressクラスがあり、DBに異なるテーブルがあると仮定します。

1人の人が1つのアドレスクラスを持つことができます。これは私にとって重要な部分です。子要素であるため、 1人のユーザーが持つことができるアドレスは1つだけであり、DB内の異なるテーブルにそれらを保持したいと思います。

通常、私はそれらを同じテーブルに保持する必要があることを知っていますが、私のシナリオではこれが必要です。

(また、1対多のように見えますが、1つのオブジェクト専用のコレクションは必要ありません)

Person     Address
-------    -------
id         id
Name       PersonId
           StreetName

そしてクラスコード

Person                                                 
--------
public virtual long Id{get;set;}
public virtual Address MyAddress {get;set;}

ご覧のとおり、Personを取得するときに、PersonのAddressプロパティを取得したいですか?しかし、それらは異なるテーブルにあります。このマッピングはどのように行うことができますか?

前もって感謝します

4

4 に答える 4

2

独自のテーブルがあるため、コンポーネントを使用して Address をマップすることはできません。すべてのフィールドが 1 つのテーブルにある場合に使用できます。Hibernate リファレンスから:

コンポーネント要素は、子オブジェクトのプロパティを親クラスのテーブルの列にマップします。

シナリオ内のテーブルとクラスをマップするには、1 対 1 の関係を使用する必要があります。

于 2009-02-12T17:33:31.613 に答える
1

データベースで 1 対 1 を強制するために、Address テーブルの PersonId に一意の制約を設定することもできます。

于 2009-02-26T01:43:53.423 に答える
0

私はそれを成し遂げるためにPersonマッピングで以下のコードを使用しました。

<one-to-one lazy="proxy" name="MyAddress" class="Address" property-ref="PersonId" cascade="delete" />

希望は他の誰かを助けます

于 2009-02-12T17:02:28.273 に答える
0

1対1の関係だと確信していますか?通常、特定の住所に複数の人が住むことができるため、多対1の関係であると思います。

とにかく、多対 1 の関係であれば、そのようにマッピングします。あなたのケースで私がすることは、Address テーブルから PersonId FK を削除し、Person テーブルから Address テーブルを参照するようにして、このようなものにすることです。

Person    Address
------    -------
id        id
Name      StreetName
AddressId

<many-to-one name="MyAddress" class="Address" column="AddressId"/>

1 対 1 の関係を主張する場合は、2 つのテーブルを結合することをお勧めします。

于 2009-02-12T15:30:55.823 に答える