Ответ
Связь «многие-ко-многим» (Many-to-Many) используется, когда сущности одной таблицы могут быть связаны с несколькими сущностями другой таблицы, и наоборот. Для её реализации требуется промежуточная таблица (join table).
Классический пример: система учёта студентов и курсов.
- Один студент может записаться на несколько курсов.
- На один курс может быть записано несколько студентов.
Пример реализации на Java с JPA/Hibernate:
@Entity
public class Student {
@Id
@GeneratedValue
private Long id;
private String name;
@ManyToMany
@JoinTable(
name = "student_course",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private Set<Course> courses = new HashSet<>();
// Геттеры и сеттеры
}
@Entity
public class Course {
@Id
@GeneratedValue
private Long id;
private String title;
@ManyToMany(mappedBy = "courses")
private Set<Student> students = new HashSet<>();
// Геттеры и сеттеры
}
Объяснение:
- Аннотация
@ManyToManyопределяет тип связи. @JoinTableна стороне владельца связи (Student) описывает промежуточную таблицуstudent_course.- Атрибут
mappedBy = "courses"в сущностиCourseуказывает, что связь управляется полемcoursesв классеStudent.
Почему так? Без промежуточной таблицы пришлось бы дублировать данные или создавать неэффективные структуры. Этот подход нормализует базу данных и устраняет избыточность.