1

私は nhibernate 結合を調べましたが、結合がどのように実行されるかわかりませんでした。例では、結合を実行する列を提供していません。これらはマッピングに基づいて自動的に実行されますか?

2 つのエンティティがあり、それらの間に 2 つの個別の関係がある場合、2 つのエンティティを結合する可能性が複数あることを意味しますか?

4

1 に答える 1

1

答えは、「これらはマッピングに基づいて自動的に実行されます」(あなたが述べたように) です。

NHibernate マッピングの一部であるすべての C# オブジェクト (POCO エンティティ) は、下にあるテーブルと列に明示的に接続されます。エンティティ レベル (C#) の関係は、DB テーブルの関係に類似しています。

ドキュメント14.3の HQL の例。関連付けと結合:

from Eg.Cat as cat 
  join cat.Mate as mate
  left join cat.Kittens as kitten

...完成し、マッピングから利益を得ています。これは、猫仲間がどのように関連しているか、それに参加して子猫のリストを取得する方法など、十分な情報を提供します

ドキュメント5.1からのマッピング。マッピング宣言

<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Eg"
    namespace="Eg">

        <class name="Cat" table="CATS" discriminator-value="C">
                <id name="Id" column="uid" type="Int64">
                        <generator class="hilo"/>
                </id>
                <discriminator column="subclass" type="Char"/>
                <property name="BirthDate" type="Date"/>
                <property name="Color" not-null="true"/>
                <property name="Sex" not-null="true" update="false"/>
                <property name="Weight"/>
                <many-to-one name="Mate" column="mate_id"/>
                <set name="Kittens">
                        <key column="mother_id"/>
                        <one-to-many class="Cat"/>
                </set>
                <subclass name="DomesticCat" discriminator-value="D">
                        <property name="Name" type="String"/>
                </subclass>
        </class>

        <class name="Dog">
                <!-- mapping for Dog could go here -->
        </class>

</hibernate-mapping>

結合。したがって、Mate を取得する場合は、テーブル内の列を使用しmate_idてテーブルCATSから Mate を取得します。同じタイプ(Cat)の子が必要な場合は、テーブルに移動し、現在の列の値と等しいCATS列を持つすべてのレコードを検索します。mother_idid

したがって、「これらはマッピングに基づいて自動的に実行されます」

于 2012-12-30T07:14:33.207 に答える