Каков правильный тип данных для JpaRepository, который имеет первичный ключ, но он также является внешним ключом?

#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;
  

Итак, согласно приведенному выше коду, у меня есть несколько вопросов.

  1. Является ли это правильным подходом для указания того, что идентификатор (первичный ключ) контакта также является внешним ключом для пользователя?

  2. И нужно ли мне использовать @PrimaryKeyJoinColumn или @JoinColumn ?

  3. Согласно приведенному выше коду, каким должен быть мой интерфейс репозитория?

      public interface ContactRepository extends JpaRepository<Contact, User> {}
      

    или

      public interface ContactRepository extends JpaRepository<Contact, Integer> {}
      

Ответ №1:

  1. Не используйте внешний ключ в качестве первичного ключа, если использование может
  2. JoinColumn
  3. Контракт имеет целочисленный идентификатор, поэтому <Contact, Integer>

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

1. Большое вам спасибо за ответ и за ваше время.