2008-10-20 6 views
-1

NHibernate를 처음 접했을뿐만 아니라 웹상에서 NHibernate 매핑에 대한 많은 정보를 찾고 있지만이 정보를 찾기에는 너무 어리 석다. NHibernate에서 값 객체에 다중 값 매핑하기

그래서 문제는 내가 다음과 같은 모델을 가지고있다 :

Datamodel http://www.tigraine.at/model.jpg

이 나는 ​​그것을보고 싶은 방법이다. 주소 등록 정보가 두 개인 클린 사용자 1 명.

데이터베이스에서이 테이블을 하나의 테이블에 유지하고 싶습니다. 은 그래서 사람 행은 내가 article on fluent interfaces을 발견

Address.StreetName 할 수있는 다른 ShippingStreetname과 Streetname 열, ShippingAddress.Streetname에 매핑 된 하나있을 것입니다 만, 여전히 통해이 작업을 수행하는 방법을 알아 냈하지 않은 XML 구성.

미리 감사드립니다.

업데이트 : 직접 해결 방법을 찾았습니다. 이것은 노드를 통해 수행 될 수 있으며 다소 단순합니다.

난 그냥 당신이 두 관계로이를 구성 할 수있는

<component name="Address" class="Address"> 
    <property name="Streetname"></property> 
    <property name="Zip"></property> 
    <property name="City"></property> 
    <property name="Country"></property> 
</component> 

<component name="ShippingAddress" class="Address"> 
    <property name="Streetname" column="ShippingStreetname" /> 
    <property name="Zip" column="ShippingZip" /> 
    <property name="City" column="ShippingCity" /> 
    <property name="Country" column="ShippingCountry" /> 
</component> 

답변

1

확인. 해결책을 직접 찾았습니다. 키는 XML 구성의 구조이며 매우 잘 작동합니다. 여기

한 방법이다 :

<component name="Address" class="Address"> 
    <property name="Streetname"></property> 
    <property name="Zip"></property> 
    <property name="City"></property> 
    <property name="Country"></property> 
</component> 

<component name="ShippingAddress" class="Address"> 
    <property name="Streetname" column="ShippingStreetname" /> 
    <property name="Zip" column="ShippingZip" /> 
    <property name="City" column="ShippingCity" /> 
    <property name="Country" column="ShippingCountry" /> 
</component> 
+0

데이터베이스에 일부 엔티티를 저장하는 경우 항상 고유 한 ID를 지정해야합니다. 그것은 인생을 더 쉽게 만듭니다. 그런 다음 주소 개체 (사용자의 구성에 해당하는 데이터베이스의 주소 테이블에 매핑 됨)를 만들고 고객의 Address 및 ShippingAddress 속성에 대한 참조를 제공 할 수 있습니다. –

0

에 다음을 추가했다 주소 및 ShippingAddress의 매핑을 달성하기 위해. 예 :

<many-to-one name="ShippingAddress" class="Yournamespace.Address"/> 
<many-to-one name="Address" class="Yournamespace.Address"/> 
+0

이 작업을 수행하는 방법에 대해 좀 더 정확하게 설명해 주시겠습니까? 주소 값 개체에는 ID가없고 동일한 데이터베이스에 저장됩니다. 그래서 단순한 관계를 사용할 수 없습니다. – Tigraine

+0

ID를 사용하지 않아도 ID가 손상되지는 않지만 nhibernate는 감사 할 것입니다! –

+0

ShippingAddress와 Address가 모두 Person과 동일한 테이블에 있으므로 ID가 없어야합니다. 추가 필드가 있습니다 – Tigraine

0

심지어 해달라고 주소에 대한 ID가 필요합니다. 이드를 유지하는 것이 얼마나 비쌉니까. 동시성 문제가 있고 고유성이 필요합니다. 이것은 ValueObjects의 목표입니다 (System.ValueObject와 혼동하지 마십시오. ValueObject의 DDD 정의 참조). 이 경우 Address는 ValueObject이므로 ID가 필요하지 않습니다. 주소 컬렉션이 필요한 경우 ""처럼 매핑하십시오 (http://www.nhforge.org/doc/nh/en/index.html#collections-ofvalues 참조).