Какую стратегию следует использовать для хранения информации о пользователях сайтов социальных сетей в базе данных с JPA? - PullRequest
1 голос
/ 30 марта 2019

Я разработал модель базы данных следующим образом. В этом я хотел бы хранить информацию о пользователях от Facebook, когда они используют Facebook или Google для входа в систему.

Sns

Я использую JPA с Hibernate для работы с базой данных, поэтому мне нужно сопоставить модель базы данных с ORM.

Что я пробовал:

Я пытался MappedSuperclass для SnsProfile абстрактного класса, но он не работает, когда мне нужно сопоставить SnsProfile с сущностью User.

Я пытался @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? Или любые изменения в модели базы данных приветствуются.

Пожалуйста, помогите. Большое вам спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...