0

我想建模如下

具有 JOINED 继承策略的超类 User。
User 有两个子类 HumanUser 和 BotUser。
HumanUser 有两个子类 NonAdminUser 和 AdminUser
NonAdminUser 有两个子类 Citizen 和 Operator
AdminUser 有两个子类 SiteAdministrator 和 UserAdministrator
BotUser 有一个子类 System

我想对重叠层次结构建模,其中具有给定 userId 的用户可以是 Citizen、Operator、SiteAdministrator 和 UserAdministrator 中的一个或多个。

如何在 JPA 中实现这一点?

在我的应用程序中,在创建一个叶级实体(例如 Citizen)后,当我想创建另一个重叠实体时,由于主键约束而引发错误,无法完成持久性。

此外,如果可以重叠,如何仅删除叶级的信息。例如,仅删除 Citizen 特定数据,但保留 SiteAdministrator 数据。

有什么想法吗?

4

1 回答 1

1

不要将新类放在现有层次结构之上,从技术上讲,子类User不可能同时是 aCitizen和 a System,因为 Java 不支持多重继承。

我会实现一个UserRoles与(偏好组合而不是继承)ManyToMany相关的类。然后,您可以从数据库User中删除单个子类,而不会产生不必要的副作用。UserUserRoles

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