Я создаю проект, который имеет ниже jpa сущностей (Таблицы)
- Пользователь (userId в качестве первичного ключа)
- UserPersonalDetails (userId - первичный / внешний ключ, сопоставленный с userID в Таблица пользователя)
- UserAcadmicsDetails (userId - первичный / внешний ключ, сопоставленный с userID в таблице User)
- UserPerformace (userId - первичный / внешний ключ, сопоставленный с userID в таблице User)
. , , и так далее
Я смущен, чтобы выбрать лучший дизайн / подход здесь, т.е. двунаправленный OneToOne или однонаправленный OneToOne ??
Мой первый хотя однонаправленный OneToOne, так как объект User интенсивно используется в приложении ( Операция, такая как вход в систему), следовательно, я не хочу извлекать другие объекты при получении объекта пользователя.
Ниже приведен код моей сущности
ПОЛЬЗОВАТЕЛЬ:
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
Long userId;
@Column(nullable = false)
String firstName;
@Column(nullable = false)
String lastName;
@Column(nullable = false,unique=true)
String email;
// getter setters
}
UserPersonalDetails
@Entity
@Table
public class UserPersonalDetails {
@Id
Long userId;
@PrimaryKeyJoinColumn
@OneToOne(cascade = CascadeType.ALL)
@OnDelete(action = OnDeleteAction.CASCADE)
@MapsId
User user;
Long univercityId;
Long collageId;
String address;
String parentContact;
String tempAddress;
// getter setters
}
Но при таком подходе, когда я пытаюсь удалить пользователя, он терпит неудачу, поскольку в других таблицах содержится внешний ключ.
Кто-нибудь может предложить идеальный дизайн здесь?