我有一组如下所示的表:
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 - 我目前通过join-subclass映射每个Person子类,如下所示(不相关的字段被删除):
<!-- 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不允许执行诸如“From IFamilyMember”之类的HQL查询。我还希望能够通过其他标准来选择 - “从IFamilyMember m,其中m.Name.First ='blah'。我将如何映射这组类,以便我可以通过名称选择家庭成员等。 。?我是否必须修改我的类层次结构,以便IFamilyMember包含我想要查询的属性(名称等等)?
感谢您的帮助!
答案 0 :(得分:1)
为什么父母与子女有不同的实体?在标准的“家庭”意义上,每个人只是一个人 - 父/子是一种可能最好通过第二个表中表达的多对多关系建模的关系。