Я разработал модель базы данных следующим образом. В этом я хотел бы хранить информацию о пользователях от Facebook, когда они используют Facebook или Google для входа в систему.
Я использую 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? Или любые изменения в модели базы данных приветствуются.
Пожалуйста, помогите. Большое вам спасибо!