1

我查看了休眠连接,但无法弄清楚连接是如何执行的。在示例中,它不提供执行连接的列。这些是根据映射自动执行的吗?

如果我有 2 个实体并且它们之间有 2 个独立的关系怎么办,这意味着加入 2 个实体有多种可能性?

4

1 回答 1

1

答案是“这些是根据映射自动执行的”(正如您所说)。

作为 NHibernate 映射一部分的任何 C# 对象(PO​​CO 实体)都显式连接到下级表和列。实体级别 (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,我们将使用 table 中的列mate_id从其CATS表中获取 Mate。当我们需要具有相同类型(Cat)的孩子时,我们将转到表CATS并搜索列mother_id等于当前id列值的所有记录。

所以,“这些是根据映射自动执行的”

于 2012-12-30T07:14:33.207 回答