JPA @ManyToMany Две сущности или три? (нужно ли описывать связывающию таблицу, как сущность?

Для связи ManyToMany в БД необходима связывающая таблица, но в JPA, похоже, не нужно создавать сущность для связывающей таблицы. Хотя, примеры встречаются Отсюда 2 вопроса

  1. Зачем создавать сущность для связывающей таблицы?
  2. Если я хочу, чтобы в связывающей таблице primary key был не отдельно, а из 2-х колонок

SQL фрагмент:

primary key (колонка_со_ссылкой_на_id_табл_1, колонка_со_ссылкой_на_id_табл_2);

Иными словами, связывающая таблица не будет иметь Id, т.к. не может быть повторяющегося сочетания в "колнка1" и "колнка2" - чем обеспечивается уникальность каждой строки. Как это сделать?

Ну и вообще good practical, по канонам и законам как делается?


Ответы (1 шт):

Автор решения: Aziz Umarov

Если руководствоваться статьей отсюда, то создавать или нет третью сущность зависит от задачи. Ведь связующая сущность может быть более сложной и состоять не только из 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
}
→ Ссылка