重複のある継承階層があります。システムは、クライアント、プロバイダー、およびエージェントになることができる人物について認識しています。人はこれらのクラスの 1 つに属さなければなりませんが、2 つまたは 3 つのクラスに属することができます。つまり、1 人の人が同時にクライアントとプロバイダーになることができます。
データベースでは、クラスごとに1つのテーブル(Person、Client、Provider、およびAgentテーブル)と、サブクラステーブルのプライマリキーからスーパークラステーブルのプライマリキーへの外部キーで、問題が解決したと思います。(可能な改善は大歓迎です:))
問題は Java の世界にあります。このデータベース設計を Java POJO にマップする最善の方法がわかりません。考えられる厄介な回避策が 3 つあります。
サブクラスのすべてのフィールドを結合した、Person という名前の一意のクラス。これには、Person の種類を知るために識別子フィールドが必要です。問題は、クライアントではなくプロバイダーである人物は、クライアント関連のすべてのフィールドが null に設定されることです。
サブクラスに共通するすべてのフィールドと、各サブクラスに関連するフィールドを保持する 3 つの「DTO 種類」のプロパティを持つ Person という名前の一意のクラス。このようにして、10 の代わりに 1 つまたは 2 つのフィールドを null にするだけです。
Person の 1 つの抽象クラスと 7 つのサブクラス (Client、Provider、Agent、ClientProvider、ClientAgent ... ClientProviderAgent) の 3 つのサブクラスの可能な組み合わせごとに 1 つ。:S(もちろん、対応するインターフェースを持つ全員)
ウェブアプリです。UIにhibernate + springとGWTを使用しています
問題は、この問題を解決する最善の方法はどれかということです。