【发布时间】:2010-09-27 15:38:06
【问题描述】:
我有一个重叠的继承层次结构。系统了解可以是客户、提供者和代理的人员。一个人必须属于这些类之一,但可以属于两个或三个,即一个人可以同时是客户和提供者。
在数据库中我认为问题解决了,每个类(Person、Client、Provider 和 Agent 表)一个表和一个从子类表的主键到超类表的主键的外键。 (欢迎任何可能的改进:))
问题出现在 Java 世界中,我不知道将此数据库设计映射到我的 Java POJO 的最佳方式。我有三种可能的解决方法:
一个名为 Person 的唯一类,其中包含子类中所有字段的联合。这将需要一个鉴别器字段才能知道 Person 的种类。问题是一个不是客户端而是提供者的人,会将所有与客户端相关的字段设置为空。
一个名为 Person 的唯一类,具有子类的所有公共字段和三个“DTO 类”属性,其中包含与每个子类相关的字段。这样我们只有一两个字段为空而不是几十个
Person 的一个抽象类和七个子类,三个子类的可能组合各一个,即 Client、Provider、Agent、ClientProvider、ClientAgent ... ClientProviderAgent。 :S(当然每个人都有对应的接口)
这是一个网络应用程序。我在 UI 上使用 hibernate + spring 和 GWT
问题是:解决这个问题的最佳方法是什么?
【问题讨论】:
-
客户、提供者和代理有什么共同点?他们有什么不同?
-
他们有共同的名字、地址等。客户有订单、折扣、收费数据。供应商有付款天数、产品等等......
标签: java inheritance multiple-inheritance overlap