簡體   English   中英

是一對一還是 Component ? 休眠映射

[英]Is it one-to-one or Component ? Nhibernate Mapping

假設我有 Person 和 Address 類,並且它們在 DB 中有不同的表。

一個人可以有一個地址類。 這對我來說是重要的部分。 一個人只能有一個地址作為它的子元素,我想將它們保存在數據庫的不同表中。

通常我知道我需要將它們放在同一張桌子上,但我的場景需要這個。

(而且它看起來像一對多,但我不想只為一個對象創建一個集合)

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

和班級代碼

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

如您所見,當我得到任何 Person 時,我想親自獲得 Address 屬性? 但是它們在不同的表中。 如何進行這種映射?

提前致謝

您不能使用組件映射地址,因為它有自己的表。 如果所有字段都在一張表中,則可以使用它。 從休眠參考:

組件元素將子對象的屬性映射到父類的表的列。

您應該使用一對一關系來映射場景中的表和類。

要在數據庫中強制執行一對一,您還可以對 Address 表中的 PersonId 設置唯一約束。

你確定是一對一的關系? 我認為這是一種多對一的關系,因為通常一個人可以住在某個地址。

無論如何,如果是多對一的關系,我會像這樣映射它們。 在你的情況下,我會做的是從地址表中刪除 PersonId FK 並從人員表中引用地址表,這樣你就會有這樣的東西。

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

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

如果您確實堅持一對一的關系,我建議將兩個表合並在一起。

我在 Person 映射中使用了下面的代碼來完成它。

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

希望能幫助別人

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM