Spring hibernate joinColumn Id - PullRequest
       85

Spring hibernate joinColumn Id

0 голосов
/ 25 января 2020

Я пытаюсь использовать объединенный столбец как часть моего идентификатора класса в разделе сущности, 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

Я хочу использовать составной ключ в качестве основного, это правильный путь, или я что-то упускаю

...