Обнаружено с JPA ManytoMany Отношения Ошибки времени сборки с IntelliJ IDEA - PullRequest
0 голосов
/ 14 октября 2018

Я очень новичок в этой теме, поэтому я следовал за учебником.после следующих шагов я получил некоторые ошибки времени сборки.

Я импортировал постоянство javax следующим образом.

import javax.persistence.*;

Затем класс модели студента

@Entity
@Table(name="STUDENT")
public class Student {
    @Id
    @GeneratedValue
    private Integer studentId;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinTable(name="Enrollment", joinColumns = {@JoinColumns(name="student_id")},
    inverseJoinColumns = {@JoinColumns(name="course_id")})
    private List<Course> courses = new ArrayList<>();
}

Класс модели курса.

@Entity
@Table(name="COURSE")
public class Course {
    @GeneratedValue
    private Integer id;

    @ManyToMany(mappedBy ="courses")
    private List<Student> students = new ArrayList<>();

Это набор ошибок, которые у меня есть

несовместимые типы: javax.persistence.JoinColumns не могут быть преобразованы в javax.persistence.JoinColumn

не может найтисимвол символ: имя метода () расположение: @interface javax.persistence.JoinColumns

annotation @ javax.persistence.JoinColumns отсутствует значение по умолчанию для элемента «значение»

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

1 Ответ

0 голосов
/ 14 октября 2018

A @JoinTable аннотация действительно имеет параметр joinColumns , но используемый вами синтаксис неверен.Если таблицы объединяются только столбцом и обратным столбцом, вы не должны использовать аннотацию @JoinColumns.Вы должны изменить это следующим образом:

@Entity
@Table(name="STUDENT")
public class Student {
    @Id
    @GeneratedValue
    private Integer studentId;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinTable(
      name="Enrollment", 
      joinColumns = @JoinColumn(name="student_id", referencedColumnName = "id"),
      inverseJoinColumns = @JoinColumn(name="course_id", referencedColumnName = "id"))
    private List<Course> courses = new ArrayList<>();
}

и только если объединение идет более чем на один столбец, вы должны сделать что-то вроде этого:

@Entity
@Table(name="STUDENT")
public class Student {
    @Id
    @GeneratedValue
    private Integer studentId;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinTable(
      name="Enrollment", 
      joinColumns = @JoinColumns{
        @JoinColumn(name="student_id", referencedColumnName = "id"),
        @JoinColumn(name="another_id", referencedColumnName = "another_id")
      },
      inverseJoinColumns = @JoinColumn(name="course_id", referencedColumnName = "id"))
    private List<Course> courses = new ArrayList<>();
}

Надеюсь, это поможет

...