私は nhibernate 結合を調べましたが、結合がどのように実行されるかわかりませんでした。例では、結合を実行する列を提供していません。これらはマッピングに基づいて自動的に実行されますか?
2 つのエンティティがあり、それらの間に 2 つの個別の関係がある場合、2 つのエンティティを結合する可能性が複数あることを意味しますか?
私は nhibernate 結合を調べましたが、結合がどのように実行されるかわかりませんでした。例では、結合を実行する列を提供していません。これらはマッピングに基づいて自動的に実行されますか?
2 つのエンティティがあり、それらの間に 2 つの個別の関係がある場合、2 つのエンティティを結合する可能性が複数あることを意味しますか?
答えは、「これらはマッピングに基づいて自動的に実行されます」(あなたが述べたように) です。
NHibernate マッピングの一部であるすべての C# オブジェクト (POCO エンティティ) は、下にあるテーブルと列に明示的に接続されます。エンティティ レベル (C#) の関係は、DB テーブルの関係に類似しています。
from Eg.Cat as cat
join cat.Mate as mate
left join cat.Kittens as kitten
...完成し、マッピングから利益を得ています。これは、猫と仲間がどのように関連しているか、それに参加して子猫のリストを取得する方法など、十分な情報を提供します
<?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_id
id
したがって、「これらはマッピングに基づいて自動的に実行されます」