Hibernate не позволяет мне делать таблицу соединений с уникальным полем «docket», независимо от того, укажу ли я «referencedColumnName =« docket »» (я думал, что Идея этого свойства заключалась в том, чтобы указать Hibernate, какое поле использовать, если это не первичный ключ).Hibernate - ManyToMany, используя уникальное свойство одной из отображенных таблиц
Таблицы базы данных:
student
---------------
id (PK) | docket (UNIQUE)
inscription
---------------
course_id | docket
inscription's PK is (course_id, docket)
course
---------------
id (PK)
Вышеуказанные проблемы поднимают со следующей конфигурацией:
На Студенческой Entity:
@ManyToMany
@JoinTable(
name="inscription",
[email protected](referencedColumnName = "docket", name="docket"),
[email protected](name="course_id", referencedColumnName = "id")
)
private List<Course> studentCourses;
На курс Entity:
@ManyToMany(mappedBy = "studentCourses")
private List<Student> students;
Чтовызывает проблема заключается в том, что, когда проект развертывания, Hibernate выполняет оператор:
alter table public.inscription add constraint FKp625s5r1hmlggpgeq4x2nju91 foreign key (docket) references public.student
который (конечно же) неверно, так как она не уточняя, что досье является уникальным полем.
Что следует делать это:
alter table public.inscription add constraint FKp625s5r1hmlggpgeq4x2nju91 foreign key (docket) references public.student(docket)
, но я не знаю, как я могу сказать ему, чтобы сделать это.
Любая помощь? Спасибо заранее.
_referencedColumnName_ в целом относится к случаям, когда у вас есть несколько полей PK в конце отношения, поэтому вы можете выровнять различные столбцы PK с эквивалентными столбцами в таблице соединений. В спецификации JPA нет ничего, что я знаю об этом, что позволяет использовать не-PK-поля для соединения; уверенный, что провайдер JPA может это разрешить, но на ваш взгляд, похоже, нет. –
Благодарим вас за комментарий! Однако, насколько я знаю, каждая таблица базы данных может иметь только PK, а другие идентификаторы таблицы должны быть определены как UNIQUE.Как PK, так и UNIQUE используются как индексы по реализации базы данных, но разница в том, как данные организованы в базе данных (прозрачно для пользователей db). Вот почему я думал, что с PK документа JPA ссылается на любой из идентификаторов таблицы (ограничения PK + UNIQUE). Возможно, это относится к столбцу составного ПК, и я неправильно понял документацию. – R4N63RW4R