双向实体是否需要双方在Hibernate中相互添加?

Gli*_*ide 2 java hibernate

双向实体(OneToMany,ManyToMany)是否需要双方相互添加才能在Hibernate中正确保存?根据我的经验,他们必需的.只是想确认我的理解.

也就是说,对于下面的权利,是否需要指示的行?

        Student student = new Student("Carl");
        Course course = new Course("Science");
        ReportCard reportCard = new ReportCard("A");

        student.getCourses().add(course);
        student.getReportCards().add(reportCard);

        reportCard.setStudent(student); // <-- Is this required?
        course.getStudents().add(student); // <-- Is this required?

        studentRepository.save(student);
Run Code Online (Sandbox Code Playgroud)

Student.java

@Entity
public class Student { 
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "student")
    private List<ReportCard> reportCards = new ArrayList<ReportCard>();

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

    @Column
    private String name;

}
Run Code Online (Sandbox Code Playgroud)

ReportCard.java

@Entity
public class ReportCard {
    @ManyToOne(optional = false)
    @JoinColumn(nullable = false)
    private Student student;

    @Column
    private String grade;
}
Run Code Online (Sandbox Code Playgroud)

Course.java

@Entity
public class Course {
    @ManyToMany(mappedBy = "courses")
    public List<Student> students = new ArrayList<>();

    @Column
    private String name;
}
Run Code Online (Sandbox Code Playgroud)

编辑:替换@JoinColumn@Column

JB *_*zet 6

Hibernate(ad其他JPA实现)关心关联的拥有方.拥有方是没有mappedBy属性的一方.因此,在您的示例中,reportCard.setStudent(student);是必需的,但student.getReportCards().add(reportCard);不是.

但总的来说,确实最好正确设置关联的每一面,以获得对象的连贯图并简单地避免代码中的错误.

请注意,使用JoinColumn注释String字段是错误的.它们不是连接列,而是列.所以你应该用@Column它来注释它们,尽管如果你没有指定注释的任何属性它也没用.