2009-05-20 3 views
11

나는 매핑 정의를 다음과 같습니다nhibernate 다 대다 매핑 - 매핑 테이블의 추가 열?

<class name="Role" table="Role" optimistic-lock="version" > 

    <id name="Id" type="Int32" unsaved-value="0" > 
     <generator class="native" /> 
    </id> 

    <property name="RoleName" type="String(40)" not-null="true" /> 

    <bag name="UsersInRole" generic="true" lazy="true" cascade="all" table="UserRoles" > 
     <key column="RoleId" /> 
     <many-to-many column="UserId" class="SystemUser, Domain"/> 
    </bag> 

<id name="Id" type="Int32" unsaved-value="0" > 
    <generator class="native" /> 
</id> 
<property name="UserName" type="String(40)" not-null="true" unique="true" /> 

이 매핑은 두 개의 열이 매핑 테이블 UserRoles 생성 - 역할 ID 및 사용자 ID.

그러나 관계의 상태를 정의하는 일부 열거 형 값과 효과적인 시작일 & 종료 날짜를 추가하고 싶습니다.

nhibernate에서 수행 할 수 있습니까? 아니면 여기에 클래스를 추가하고 m-to-m 관계를 2 개 관계로 변경해야합니까 [사용자] 1 대 m [user_role] m-to-1 [역할] ?

답변

9

추가 수업을 추가해야합니다. 예 : 추가 속성을 유지하기 위해 코드에서 UserRole.

매핑에 관해서는 언급 한대로 클래스로 매핑 할 수 있습니다. 그러나 나는 또한이 역할 매핑 복합 요소로 매핑 할 수 있다고 생각 : 그들은 UserRoles 테이블의 기본 키의 일부가 있기 때문에

<set name="UsersInRole" lazy="true" table="UserRoles" > 
    <key column="RoleId" /> 
    <composite-element class="UserRole"> 
    <many-to-one name="User" column="UserId" not-null="true"/> 
    <propery name="RelationState" not-null="true"/> 
    <propery name="StartDate" not-null="true"/> 
    <propery name="EndDate" not-null="true"/> 
    </composite-element> 
</set> 

모든 속성이 null이되지해야합니다. 자세한 내용은 다음을 참조하십시오

+0

들으. 나는 그것을 시도 해줄거야 – Greg

+0

링크가 죽었어 ... – Anttu

0

클래스를 추가하십시오.