#java #hibernate #spring-boot #jpa
#java #переход в спящий режим #spring-boot #jpa
Вопрос:
Я разработал модель базы данных, подобную этой. В этом я хотел бы сохранить информацию о пользователях Facebook, когда они используют Facebook или Google для входа в систему.
Я использую 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 с пользовательским объектом. Итак, я хотел бы получить несколько советов от таких экспертов, как вы 🙂