我查看了休眠连接,但无法弄清楚连接是如何执行的。在示例中,它不提供执行连接的列。这些是根据映射自动执行的吗?
如果我有 2 个实体并且它们之间有 2 个独立的关系怎么办,这意味着加入 2 个实体有多种可能性?
我查看了休眠连接,但无法弄清楚连接是如何执行的。在示例中,它不提供执行连接的列。这些是根据映射自动执行的吗?
如果我有 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,我们将使用 table 中的列mate_id
从其CATS
表中获取 Mate。当我们需要具有相同类型(Cat)的孩子时,我们将转到表CATS
并搜索列mother_id
等于当前id
列值的所有记录。
所以,“这些是根据映射自动执行的”