2009-06-14 2 views
0

Person과 Address라는 두 개의 테이블이있다. 두 개의 외래 키 (명시 적 기본 키 열) 이외의 추가 열 IsCurrent가 포함 된 매핑 테이블 PersonAddressMap이 있습니다. 필자는 Person, Address 및 PersonAddressMap 각각에 대해 하나씩 세 가지 매핑 클래스를 만들었습니다. Person의 모든 Addresses에 액세스해야하고 Address의 특정 주소를 가진 모든 Person에 액세스해야하므로 Person 및 Address 클래스의 PersonAddressMap에 일대 다 매핑이 ​​필요합니다. 이제 문제는 양방향 협회가 무한 루프를 만드는 것입니다. 연관 중 하나를 제거하면로드가 제대로 작동하지만 매핑 테이블에 저장이 삽입되지 않습니다 (예 : Person에서 PersonAddressMap으로의 연결이 하나 뿐이고 새 주소로 새 Person을 삽입하려고하면 Person 만 해당). 삽입되고 있습니다.). 매핑 파일은 다음과 같습니다.NHibernate 매핑 테이블에 추가 컬럼을 가진 many to many 매핑

<class name="Person" table="Person"> 

    <id name="Id"> 
     <column name="Id" sql-type="int" not-null="true" /> 
     <generator class="identity" /> 
    </id> 
    <property name="Name" column="Name"/> 
    <bag name="AddressDetails" table="PersonAddressMap" cascade="all" > 
     <key column="PersonId" /> 
     <one-to-many class="PersonAddressMap" /> 
    </bag> 
    </class> 

    <class name="Address" table="Address"> 

    <id name="Id"> 
     <column name="Id" sql-type="int" not-null="true" /> 
     <generator class="identity" /> 
    </id> 
    <property name="City" column="City"/> 
    <bag name="PersonDetails" table="PersonAddressMap" cascade="all" > 
     <key column="AddressId" /> 
     <one-to-many class="PersonAddressMap" /> 
    </bag> 
    </class> 

    <class name="Job" table="Job" lazy="false"> 
    <composite-id> 
     <key-many-to-one column="PersonId" name="Person" /> 
     <key-many-to-one column="AddressId" name="Address" /> 
    </composite-id> 
    <property name="IsCurrent" column="IsCurrent"/> 
    </class> 

미리 감사드립니다.

답변

0

many-to-many 관계 항상은 inverse의 한 끝점을 inverse로 표시하도록 요구합니다. 당신의 특별한 예에서는 Person의 AddressDetails를 사용할 수 있습니다. 예 :

<bag name="AddressDetails" table="PersonAddressMap" cascade="all" inverse="true"> 
    <key column="PersonId" /> 
    <one-to-many class="PersonAddressMap" /> 
</bag> 
0

inverse = 'true'를 사용하면 조인 테이블 값 (예 : PersonAddressMap)이 삽입되지 않습니다.

inverse = 'false'로 설정하면 삽입됩니다. 그러나 delete 문은 sql에서 발생합니다.

관련 문제