遇到JPA多对多关系IntelliJ IDEA的构建时间错误

时间:2018-10-14 10:03:03

标签: spring-boot jpa spring-data-jpa spring-data

我是这个主题的新手,所以我遵循了一个教程。经过以下步骤,我得到了一些构建时间错误。

我已经这样导入了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

注释@ javax.persistence.JoinColumns缺少元素“值”的默认值

有人可以帮我摆脱这个问题吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

一个@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<>();
}

希望这会有所帮助