我具有以下JPA实体层次结构:
登录到应用程序后,用户在会话中具有UserAccount
的实例。然后根据与该UserAccount
关联的组织的具体类型(Admin
,Business
或Family
),向用户显示不同的仪表板/屏幕,例如如果用户是Business
,则显示该企业的仪表板。
我对此设计的担心是,每次用户登录时,我都必须进行instanceof
检查,以便知道要显示哪种仪表板。我还可以通过在instanceof
中具有一个属性(例如UserAccount
(将采用三个值之一))来避免organizationType
检查,但是这样会有多余的信息。
有没有办法改善我的设计?如果可以,怎么办?
最佳答案
贪婪地获取两者,不要多余。
根据继承策略,您可能已经具有organizationType
信息,并且可以免费公开它。
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "DTYPE")
public abstract class AbstractOrganization implements Serializable
{
@Id
protected Long id;
@Column(name = "DTYPE", insertable = false, updatable = false)
protected String organizationType;
...
}
JOINED
策略也是如此。不要实现
setOrganizationType
方法。由于使用表模拟层次结构需要区分符(
TABLE_PER_CLASS
策略除外),因此没有冗余,并且JPA提供程序将为您处理此属性。