2012-12-29 148 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列值的所有記錄。因此,「這些是基於映射自動執行的」