1

次のクラス階層があるとします。

interface Client:
    String name
    String country

class RegisteredClient implements Client:
    String assignedId

class UnregisteredClient implements Client

class ClientRisk:
    Client client
    int riskLevel

アイデアはClientRisk、IDを持つ登録済みクライアント(カスタムであり、他の場所から取得されたもの)またはカスタムクライアント(登録されていない)へのリンクを持つことができるということです。現在、次の DB 構造が存在します。

REGISTERED_CLIENT(ASSIGNED_ID, NAME, COUNTRY)
CLIENT_RISK(REG_CLIENT_ID, UNREG_NAME, UNREG_COUNTRY, RISK_LEVEL)

このエンティティを Hibernate にマップしました。たとえば、 に 2 つの隠しフィールドがありClientRisk、1 つは参照RegisteredClientしており、もう 1 つUnregisteredClientはコンポーネントとしてマップされています。そしてclient、実行時にこれら 2 つのフィールドを区別するプロパティを追加しました。

これは一種の醜い解決策であり、拡張性がありません (client.nameたとえば、基準や HQL だけを記述することはできません)。一方、未登録のクライアントを別のテーブルに入れたくありません。それは、カスタムであり、とにかく共有されていないためです。UnregisteredClientテーブルに基づいたエンティティとしてマップしたくありません。CLIENT_RISKこれにより、不要な結合が発生します ( CLIENT_RISK JOIN CLIENT_RISK)。

私の質問は、Hibernate でこのような状況を処理する最善の方法は何ですか?

4

0 に答える 0