2

假设我有人员和地址类,它们在数据库中有不同的表。

一个人可以有一个地址类。这对我来说是重要的部分。一个人只能有一个地址作为子元素,我想将它们保存在数据库中的不同表中。

通常我知道我需要将它们放在同一张桌子上,但我的场景需要这个。

(而且它看起来像一对多,但我不想只为一个对象收集一个)

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

和类代码

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

如您所见,当我获得任何 Person 时,我想亲自获得 Address 属性?但它们在不同的表中。如何进行这种映射?

提前致谢

4

4 回答 4

2

您不能使用组件映射地址,因为它有自己的表。如果您在一张表中包含所有字段,则可以使用它。从休眠参考:

组件元素将子对象的属性映射到父类表的列。

您应该使用一对一的关系来映射场景中的表和类。

于 2009-02-12T17:33:31.613 回答
1

要在数据库中强制一对一,您还可以对 Address 表中的 PersonId 设置唯一约束。

于 2009-02-26T01:43:53.423 回答
0

Are you sure it's a one to one relationship? I would assume it's a many-to-one relationship as usually more then one person can live at a certain address.

Anyways if it's a many-to-one relationship I'd map them like so. What I would do in your case is remove the PersonId FK from the Address table and put reference the Address Table from the Person table so you'd have something like this.

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

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

and if you do insist on a one-to-one relationship I would recommend merging the two tables together.

于 2009-02-12T15:30:55.823 回答
0

我在 Person mapping 中使用了下面的代码来完成它。

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

希望能帮助别人

于 2009-02-12T17:02:28.273 回答