我应该使用什么策略通过JPA将“社交网站”的用户信息存储到数据库中?

时间:2019-03-30 06:19:17

标签: java hibernate spring-boot jpa

我设计了这样的数据库模型。在这种情况下,我想在用户使用Facebook或Google登录时存储来自Facebook的用户信息。

Sns

我将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上能很好地工作?或欢迎对数据库模型进行任何更改。

请帮助。非常感谢!

0 个答案:

没有答案