Как добавить составной внешний ключ с помощью данных Spring JPA и Hibernate?

Это таблицы, которые я намерен иметь в своей базе данных.

Первая таблица

Вторая таблица

Третий стол

Отвечает ли это на ваш вопрос? JPA, как сделать составной внешний ключ частью составного первичного ключа

Mehdi Rahimi 17.05.2022 14:29
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
1
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
@Entity
@Table(name = "STATIONS")
public class Station {
    @Id
    private Long stnCode;
}
@Entity
@Table(name = "TRAINS")
public class Train {
    @Id
    private String trainNo;
}
@Entity
@Table(name = "STOPS")
public class Stop {
    @EmbeddedId
    private StopId stopId;
}

@Embeddable
class StopId implements Serializable {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "TRAIN_NO")
    private Train trainNo;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "STN_CODE")
    private Station stnCode;
}
Hibernate: create table STATIONS (stnCode bigint not null, primary key (stnCode))
Hibernate: create table STOPS (STN_CODE bigint not null, TRAIN_NO varchar(255) not null, primary key (STN_CODE, TRAIN_NO))
Hibernate: create table TRAINS (trainNo varchar(255) not null, primary key (trainNo))
Hibernate: alter table STOPS add constraint FK1431wv4cp0qef8drx65we3m03 foreign key (STN_CODE) references STATIONS
Hibernate: alter table STOPS add constraint FK5omkrq9vt17i1w6qose6njvhw foreign key (TRAIN_NO) references TRAINS

Спасибо. Можете ли вы объяснить, почему встраиваемый класс должен реализовывать Serializable?

wetpaddyfield 17.05.2022 17:20

В другом случае у вас будет исключение, вызванное: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Невозможно построить Hibernate SessionFactory; вложенным исключением является org.hibernate.MappingException: класс Composite-id должен реализовывать Serializable: StopId

Ivan Zbykovskyi 17.05.2022 18:15

Другие вопросы по теме