#java #spring-boot #hibernate #spring-data-jpa #jpa-2.0
#java #весенняя загрузка #спящий режим #spring-data-jpa #jpa-2.0
Вопрос:
У меня есть следующие таблицы,
User
int id PK
Contact
int id PK, FK to User.id
Итак, мой код Contact.java
выглядит следующим образом,
@Getter(value = AccessLevel.NONE)
@Setter(value = AccessLevel.NONE)
@Id
@Column(name = "id", insertable = false, updatable = false)
private Integer id;
@OneToOne(fetch = FetchType.LAZY)
@MapsId
@JoinColumn(name = "id", nullable = false)
private User userId;
В моем User.java
он имеет,
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
Итак, согласно приведенному выше коду, у меня есть несколько вопросов.
-
Является ли это правильным подходом для указания того, что идентификатор (первичный ключ) контакта также является внешним ключом для пользователя?
-
И нужно ли мне использовать
@PrimaryKeyJoinColumn
или@JoinColumn
? -
Согласно приведенному выше коду, каким должен быть мой интерфейс репозитория?
public interface ContactRepository extends JpaRepository<Contact, User> {}
или
public interface ContactRepository extends JpaRepository<Contact, Integer> {}
Ответ №1:
- Не используйте внешний ключ в качестве первичного ключа, если использование может
- JoinColumn
- Контракт имеет целочисленный идентификатор, поэтому
<Contact, Integer>
Комментарии:
1. Большое вам спасибо за ответ и за ваше время.