1
我查看了nhibernate连接,但无法弄清连接是如何执行的。在这些示例中,它没有提供执行连接的列。这些是根据映射自动执行的吗?NHibernate HQL连接列
如果我有两个实体并且它们之间有两个单独的关系,那么这意味着有多个可能性加入这两个实体?
我查看了nhibernate连接,但无法弄清连接是如何执行的。在这些示例中,它没有提供执行连接的列。这些是根据映射自动执行的吗?NHibernate HQL连接列
如果我有两个实体并且它们之间有两个单独的关系,那么这意味着有多个可能性加入这两个实体?
答案是“这些是根据映射自动执行的”(正如你所说的)。
作为NHibernate映射一部分的任何C#对象(POCO实体)都明确地连接到下表和列。任何关于实体级别(C#)的关系都与DB表关系类比。
的HQL例如文档14.3. Associations and joins:
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>
的加入 。所以如果我们去找一个伴侣,我们将使用表CATS
中的mate_id
这一列来从它的表中获得Mate。当我们需要相同类型的儿童(Cat)时,我们将转到表CATS
,并搜索列mother_id
等于当前id
列值的所有记录。因此,“这些是基于映射自动执行的”