2009-06-15 154 views
1

我有一組表,這些表如下所示:NHibernate的繼承映射

Person - PersonID, FirstName, LastName, etc...<br/> 
Family - FamilyID, etc...<br/> 
Parent - PersonID, FamilyID, etc...<br/> 
Child - PersonID, FamilyID, etc...<br/> 
Contact- PersonID, etc...<br/> 

如下(使用C#)我的對象層次的組織:

class Person 
class Family 
interface IFamilyMember 

class Parent : Person, IFamilyMember 
class Child : Person, IFamilyMember 
class Contact : Person 

使用NHibernate - 我目前如下所示映射每個經由連接子類的子類的人的(不相關的字段被移除):

<!-- Parent --> 
<joined-subclass name="Parent" table="Parent"> 
    <key column="PersonID" /> 
    <many-to-one name="Family" column="FamilyID" cascade="save-update" /> 
</joined-subclass> 

<!-- Child --> 
<joined-subclass name="Child" table="Child"> 
    <key column="PersonID" /> 
    <many-to-one name="Family" column="FamilyID" cascade="save-update" /> 
</joined-subclass> 

<!-- Child --> 
<joined-subclass name="Contact" table="Contact"> 
    <key column="PersonID" /> 
</joined-subclass> 

的問題是,我真的很希望能夠對IFamilyMember接口執行查詢,並與當前的映射,NHibernate的不允許執行HQL查詢,如「From IFamilyMember」。我還希望能夠通過其他標準來選擇 - 「來自IFamilyMember m,其中m.Name.First ='blah'。如何映射這組類以便我可以通過名稱等選擇家庭成員。 ?我必須修改我的類層次結構,使得IFamilyMember包含我希望查詢的屬性(名稱,等...)?

感謝您的幫助!

回答

1

爲什麼父母與子女不同實體?在標準的「家庭」意義上,每個人只是一個人 - 父母/子女是一種關係,可能是通過第二表中表達的多對多關係最好地建模的關係

+0

我試圖刪除字段/屬性與討論無關。Parent和C hild具有其他字段,這些字段在它們和從Person繼承的其他類型之間並不常見。這些領域足夠多並且足夠專業化,以至於他們不認爲這將是他們成爲Person實體的一部分的好設計。 – Krazzy 2009-06-15 14:38:33