2009-05-20 2 views
11

: - RoleIdとユーザーIDnhibernate多対多マッピング - マッピングテーブルの追加列?私は、マッピング定義を以下している

<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" /> 

をこのマッピングは、2つの列がありマッピングテーブルUserRolesを生成します。

ただし、関係の状態を定義するいくつかの列挙値と有効開始の&終了日を追加する必要があります。

nhibernateで実行することは可能ですか?ここでクラスを追加してm-to-mの関係を2つのリレーションに変更する必要があります[ユーザー] 1対m [user_role] m-to-1 [ ?

答えて

9

追加のクラスを追加する必要があります。追加プロパティを保持するためのコードでUserRole。

マッピングについて言えば、これは前述のようにクラスとしてマッピングできます。

<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> 

彼らはUserRolesテーブルの主キーの一部となっているため、すべてのプロパティは、非NULLでなければなりません。しかし、私はまた、ロールマッピングにおける複合要素としてマッピングすることができると思います。詳細については、以下を参照してください

+0

THXを。私はそれを試してみましょう – Greg

+0

リンクが死んでいる... – Anttu

0

追加のクラスを追加します。