0

次のようなモデルにしたい

JOINED継承戦略を持つスーパークラスのユーザー。
Userには、HumanUserとBotUserの2つのサブクラスがあります。
HumanUserには2つのサブクラスがありますNonAdminUserとAdminUserNonAdminUser
には2つのサブクラスがありますCitizenとOperatorAdminUser
には2つのサブクラスがありますSiteAdministratorと
UserAdministratorBotUserには1つのサブクラスがありますSystem

特定のuserIdを持つユーザーが、Citizen、Operator、SiteAdministrator、およびUserAdministratorの1つ以上になることができる重複階層をモデル化したいと思います。

これはJPAでどのように達成できますか?

私のアプリケーションでは、1つのリーフレベルエンティティ(たとえばCitizen)を作成した後、別のオーバーラップエンティティを作成しようとすると、主キーの制約のために永続化を実行できないというエラーがスローされます。

また、重複が可能な場合は、リーフレベルで情報のみを削除する方法。たとえば、Citizen固有のデータのみを削除し、SiteAdministratorデータはそのままにします。

何かご意見は?

4

1 に答える 1

1

新しいクラスを既存の階層の上に置かないでください。 Java は多重継承をサポートしていないため、 のサブクラスがと のUser両方になることは技術的に不可能です。CitizenSystem

私は(継承よりも構成を優先する)UserRolesとのManyToMany関係でクラスを実装します。次に、望ましくない副作用なしに、DB から および DBから のUser単一のサブクラスを削除できます。UserUserRoles

@ManyToMany
private List<User> roles = new ArrayList<User>();
于 2013-03-12T13:01:17.657 に答える