JPA @ManyToMany Две сущности или три? (нужно ли описывать связывающию таблицу, как сущность?
Для связи ManyToMany в БД необходима связывающая таблица, но в JPA, похоже, не нужно создавать сущность для связывающей таблицы. Хотя, примеры встречаются Отсюда 2 вопроса
- Зачем создавать сущность для связывающей таблицы?
- Если я хочу, чтобы в связывающей таблице primary key был не отдельно, а из 2-х колонок
SQL фрагмент:
primary key (колонка_со_ссылкой_на_id_табл_1, колонка_со_ссылкой_на_id_табл_2);
Иными словами, связывающая таблица не будет иметь Id, т.к. не может быть повторяющегося сочетания в "колнка1" и "колнка2" - чем обеспечивается уникальность каждой строки. Как это сделать?
Ну и вообще good practical, по канонам и законам как делается?
Ответы (1 шт):
Если руководствоваться статьей отсюда, то создавать или нет третью сущность зависит от задачи. Ведь связующая сущность может быть более сложной и состоять не только из 2 колонок, да и логика связывания может быть специфичная
Пример из статьи
@Embeddable
class CourseRatingKey implements Serializable {
@Column(name = "student_id")
Long studentId;
@Column(name = "course_id")
Long courseId;
// standard constructors, getters, and setters
// hashcode and equals implementation
}
@Entity
class CourseRating {
@EmbeddedId
CourseRatingKey id;
@ManyToOne
@MapsId("studentId")
@JoinColumn(name = "student_id")
Student student;
@ManyToOne
@MapsId("courseId")
@JoinColumn(name = "course_id")
Course course;
int rating;
// standard constructors, getters, and setters
}