2012-12-29 121 views
1

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

如果我有两个实体并且它们之间有两个单独的关系,那么这意味着有多个可能性加入这两个实体?

回答

1

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

作为NHibernate映射一部分的任何C#对象(PO​​CO实体)都明确地连接到下表和列。任何关于实体级别(C#)的关系都与DB表关系类比。

的HQL例如文档14.3. Associations and joins

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

...完成,并从映射的利润。这提供了足够的信息,如何伴侣是相关的,如何加入它从文件获得小猫

映射列表5.1. Mapping declaration

<?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列值的所有记录。因此,“这些是基于映射自动执行的”