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