0

SINGLE_TABLE 継承 startegy を使用して、usres をマップします (以下のコード例を参照)。

UnActiveRegularUserUnActiveBusinessUser「ACTIVE_USERS」テーブルから別のテーブル ( 「UNACTIVE_USERS」など)にマップし、継承を維持する方法はありますか?

ノート:

- ここでのポイントは、ex 間のコードの重複を避けることです。RegularUser 対 UnActiveRegularUser (同じプロパティを使用するため) ですが、「ACTIVE_USERS」と「UNACTIVE_USERS」の 2 つの異なるテーブルにマップします。

-strategy = InheritanceType.SINGLE_TABLE は変更しないでください。

-別の抽象化レイヤーを追加すると、この問題を解決できますか?

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "ACTIVE_USERS")
public class User {
    @Id @GeneratedValue
    protected Long id;

    @Column(nullable = false)
    protected String name;
}


@Entity
public class RegularUser extends User{
//more getters and settres
}

@Entity
public class UnActiveRegularUser extends User{
//same getters and setters as in RegularUser
}

@Entity
public class BusinessUser extends User {
//more getters and settres
}

@Entity
public class UnActiveBusinessUser extends User {
//same getters and setters as in BusinessUser
}

ありがとう、ネイサン

4

1 に答える 1

0

フィールドを別のテーブルに永続化しても、コードの重複を防ぐことはできません。私はあなたがするべきだと思いますUnActiveBusinessUser拡張BusinessUser、およびUnactiveRegularUser拡張RegularUser

ユーザーが非アクティブになる可能性がある (つまり、RegularUser が UnactiveRegularUser になる) 場合、継承は適切な解決策ではないことに注意してください。オブジェクトは、あるタイプから別のタイプに移動できません。UnactiveRegularUser には RegularUser 以外のものはないように見えるので、このサブクラスが役立つかどうかはわかりません。

于 2012-07-08T08:04:36.670 に答える