Я пытаюсь использовать объединенный столбец как часть моего идентификатора класса в разделе сущности, COURSE_NAME находится в таблице COURSE, и я соединил его с таблицей CHART и пытаюсь использовать его в таблице SECTION в качестве одной части класса идентификатора в качестве составной ключ
таблица COURSE
@Entity
@Table (name = "COURSE")
public class Course {
@Id
@Column (name = "COURSE_NAME", nullable = false, length = 24)
private String course_name;
@Column (name = "UNIT", nullable = false)
private int unit;
@Enumerated (EnumType.STRING)
@Column (name = "COURSE_TYPE", nullable = false, length = 24)
private CourseType courseType;
@ManyToMany (fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "PREREQUISITE_NAME", referencedColumnName = "PREREQUISITE_NAME")
private List<Prerequisite> prerequisite = new ArrayList<>();
@ManyToMany (mappedBy = "course")
private List<Chart> charts = new ArrayList<>();
@ManyToMany (mappedBy = "course", cascade = CascadeType.ALL)
private List<Section> sections = new ArrayList<>();
}
таблица CHART
@Entity
@Table (name = "CHART")
public class Chart {
@Id
@Column (name = "CHART_NAME", nullable = false, length = 24)
private String chart_name;
@Id
@Temporal (TemporalType.DATE)
@Column (name = "CHART_YEAR", nullable = false)
private Date chart_year;
@Id
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn (name = "DEPARTMENT_NAME", referencedColumnName = "DEPARTMENT_NAME")
private Department department;
@ManyToMany (fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn (name = "COURSE_NAME", referencedColumnName = "COURSE_NAME")
private List<Course> course = new ArrayList<>();
@OneToMany (mappedBy = "chart", cascade = CascadeType.ALL)
private List<Section> sections = new ArrayList<>();
}
таблица SECTION
@Entity
@Table (name = "SECTION")
public class Section {
@Id
@Column (name = "SECTION_NUMBER", nullable = false, length = 24)
private String section_number;
@Id
@Temporal (TemporalType.DATE)
@Column (name = "SECTION_YEAR", nullable = false)
private Date section_year;
@Id
@Enumerated (EnumType.STRING)
@Column (name = "SEMESTER", nullable = false, length = 24)
private Semester section_semester;
@Temporal (TemporalType.DATE)
@Column (name = "FINAL_EXAM_DATE", nullable = false)
private Date final_exam_date;
@Temporal (TemporalType.TIME)
@Column (name = "FINAL_EXAM_TIME", nullable = false)
private Date final_exam_time;
@Column (name = "SECTION_DESCRIPTION", nullable = false)
private String section_description;
@Id
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumns ({
@JoinColumn (name = "COURSE_NAME", referencedColumnName = "COURSE_NAME"),
@JoinColumn (name = "CHART_NAME", referencedColumnName = "CHART_NAME"),
@JoinColumn (name = "CHART_YEAR", referencedColumnName = "CHART_YEAR"),
@JoinColumn (name = "DEPARTMENT_NAME", referencedColumnName = "DEPARTMENT_NAME")
})
private Chart chart;
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn (name = "START_TIME", referencedColumnName = "START_TIME"),
@JoinColumn (name = "END_TIME", referencedColumnName = "END_TIME"),
@JoinColumn (name = "DAYS_IN_WEEK", referencedColumnName = "DAYS_IN_WEEK")
})
private TimeSlot time_slot;
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn (name = "CLASS_NUMBER", referencedColumnName = "CLASS_NUMBER")
private ClassRoom class_room;
@OneToOne (mappedBy = "section")
private Plan plan;
@OneToMany (mappedBy = "section", cascade = CascadeType.ALL)
private List<Take> takes = new ArrayList<>();
@OneToOne (mappedBy = "section", cascade = CascadeType.ALL)
private Teach teach;
@OneToMany (mappedBy = "section")
private List<Attachment> attachments = new ArrayList<>();
}
и это ошибка
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.cfg.RecoverableException: Unable to find column with logical name: COURSE_NAME in org.hibernate.mapping.Table(chart) and its related supertables and secondary tables
Я хочу использовать составной ключ в качестве основного, это правильный путь, или я что-то упускаю