我设计了这样的数据库模型。在这种情况下,我想在用户使用Facebook或Google登录时存储来自Facebook的用户信息。
我将JPA与Hibernate一起使用来处理数据库,因此我需要将数据库模型映射到ORM。
我尝试过的事情:
我为MappedSuperclass
抽象类尝试了SnsProfile
,但是当我需要将SnsProfile与用户实体进行映射时,此方法不起作用。
我尝试了@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
,但是如果我有更多的“社交网站”和其他属性,该表将变得越来越复杂。
我想拥有一些这样的JPA实体:
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String password;
private String email;
private UserStatus status;
@OneToMany(fetch = FetchType.LAZY,
cascade = CascadeType.ALL,
mappedBy = "user")
private List<SnsProfile> profile;
}
public abstract class SnsProfile implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String snsId;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "user_id", nullable = false)
private User user;
}
public abstract class FacebokProfile extends SnsProfile {
// Properties here
}
public abstract class GoogleProfile extends SnsProfile {
// Properties here
}
能否请您给我一些有关实体设计的建议,以使上述数据库模型在JPA上能很好地工作?或欢迎对数据库模型进行任何更改。
请帮助。非常感谢!