4

PK (複合主キー) として 2 つの列を持つテーブルがあります。

それらを「Id」にマップするにはどうすればよいhbm.xmlですか?

<id name="A" />  

流暢なnhibernateでどうすればできますか?

4

3 に答える 3

13

NHibernate のドキュメントでは、 composite-idを使用してマップする方法について説明しています。

コンポーネントを compositeid として使用することもできます。

Fluent NHibernate の場合:

public class ClassNameMap: ClassMap<ClassName>
{
    public ClassNameMap()
    {
        CompositeId().
            .KeyReference(x => x.A, "A")
            .KeyReference(x => x.B, "B");
    }
}
于 2011-11-25T17:01:33.713 に答える
5

nHibernate の複合主キーについては、お勧めします。

hbm.xml の場合:

<hibernate-mapping>   
<class table="TableName" name="Namespace.ClassName, ClassName">
<composite-id>
    <key-property name="IdPropertyOne" column="ColumnOne" />
    <key-property name="IdPropertyTwo" column="ColumnTwo" />
</composite-id>
<property name="PropertyName" column="ColumnName" type="String"></property>
</class>
</hibernate-mapping>

次に、Equals メソッドと GetHashCode メソッドをオーバーライド nHibernate が新しいキーを比較し、異なるオブジェクトを識別する方法を認識できるようにする必要があります。それはあなたがどこまで進んでいるかにもよりますが、「key-many-to-one」を使用してこれらに外部キーをマッピングすることもできます。

鍵多対一の場合:

<key-many-to-one name="PropertyOneObjName" column="ColumnOne" class="PropertyOneClassName">

流暢な休止状態の場合、複合キーは次のようになります。

public ClassName(){
    CompositeId().
        KeyProperty(x => x.IdPropertyOne,"ColumnOne")
        KeyProperty(x => x.IdPropertyTwo,"ColumnTwo")
}
于 2011-11-25T14:31:45.947 に答える
1

これをNHibernateで試してみてください...

<composite-id name="Key" class="KeyClass"> 
  <key-many-to-one name="first" column="firstColumn" lazy="proxy" class="FirstClass"/>
  <key-many-to-one name="second" column="secondColumn" lazy="proxy" class="SecondClass"/>
</composite-id>

流暢な Hibernate の場合

<composite-id>  
  <key-property type="Int32" name="first" column="firstColumn" />  
  <key-property type="Int32" name="second" column="secondColumn" />  
</composite-id>  

お役に立てば幸いです... :-)

于 2011-11-25T13:42:21.590 に答える