@Entity
class Student {
@Id
Long id;
@ManyToMany
@JoinTable(
name = "course_like",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id"))
List<Course> likedCourses;
// additional properties
// standard constructors, getters, and setters
}
@Entity
class Course {
@Id
Long id;
@ManyToMany(mappedBy = "likedCourses")
Set<Student> likes;
// additional properties
// standard constructors, getters, and setters
}
Сторона владельца - это место, где мы настраиваем отношения, для которых в этом примере мы выберем класс Student.
Обратите внимание, что при использовании @ JoinTable или даже @ JoinColumn не требуется: JPA сгенерирует для нас имена таблиц и столбцов. Однако стратегия, используемая JPA, не всегда соответствует соглашениям об именах, которые мы используем. Следовательно, есть возможность настроить имена таблиц и столбцов.
На целевой стороне нам нужно только указать имя поля, которое отображает связь. Поэтому мы устанавливаем атрибут mappedBy для @ ManyToMany аннотации в классе Course: