问题
如何映射看似具有继承关系的实体:
Company Supplier Manufacturer Customer
但是,供应商可以是制造商.
要么
Person Doctor Patient Employee
患者可以是医生,也可以是员工.
建议:使用角色
在NHibernate论坛的讨论中,响应通常是多重继承.
http://forum.hibernate.org/viewtopic.php?t=959076
他们建议的解决方案是使用组合或使用“角色”.但是,我找不到任何关于如何做到这一点的例子或解释.
“Favor composition over inheritance.”
Remember that little goodie from
class? In this instance I have to
agree that you are trying multiple
inheritance– not possible in C# or
Java (yet). I,personally,would
encourage you to think about
re-modeling so you have a Person
object and a person has a one-to-many
collection of Roles.
解决方法
使用人们共有的所有属性定义Person类.然后定义一个Role超类和DoctorRole,PatientRole和EmployeeRole子类(假设每个角色都有不同的属性).
Person类可以定义一组角色,Role类可以定义一组人员.或者创建一个Association类可能更容易,我们称之为PeopleRole.
This页面解释了如何进行映射,以便PeopleRole是一个复合元素.查看Order / Product / LineItem示例.你的人就像Order,PeopleRole就像LineItem,Role就像Product.