Какую стратегию я должен использовать для хранения информации о пользователях сайтов социальных сетей в базе данных с помощью JPA?

#java #hibernate #spring-boot #jpa

#java #переход в спящий режим #spring-boot #jpa

Вопрос:

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

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

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

Комментарии:

1. В чем ваш вопрос?

2. Я обновил свой вопрос. Не могли бы вы, пожалуйста, дать мне несколько советов по дизайну объектов, чтобы модель базы данных, описанная выше, хорошо работала на JPA? Или любые изменения в модели базы данных приветствуются.

3. «Хорошо работать» — это слишком расплывчато. Почему бы вам не попробовать реализовать то, что вы хотите, и сначала посмотреть, соответствует ли это вашим потребностям?

4. Да, я пробовал, но, как я уже упоминал, если у меня есть еще несколько социальных сайтов и дополнительных свойств, таблица становится все более и более сложной (для strategy @Inheritance(strategy = InheritanceType.SINGLE_TABLE) )

5. Я попробовал MappedSuperclass для абстрактного класса SnsProfile, но это не работает, когда мне нужно сопоставить SnsProfile с пользовательским объектом. Итак, я хотел бы получить несколько советов от таких экспертов, как вы 🙂