У меня есть своего рода экзотическое отображение для поля:
@ElementCollection
@CollectionTable(name = "studentGradeLevel", joinColumns = @JoinColumn(name = "studentId"))
@MapKeyJoinColumn(name = "schoolYearId")
@Column(name = "gradeLevel", nullable = false)
@ForeignKey(name = "fkStudentGrade2Student")
private Map<SchoolYear, GradeLevel> gradeLevels;
SchoolYear - это сущность, а GradeLevel - это перечисление.
Я использую инструменты Hibernate для генерации DDL для схемы. Схема, которую это генерирует, ниже:
create table studentGradeLevel (
studentId numeric(19,0) not null,
gradeLevel int not null,
schoolYearId int not null,
primary key (studentId, schoolYearId)
);
alter table studentGradeLevel
add constraint FK1BCA4A883A97C498
foreign key (schoolYearId)
references schoolYear;
alter table studentGradeLevel
add constraint fkStudentGrade2Student
foreign key (studentId)
references student;
Проблема в том, что я не могу изменить имя ограничения для внешнего ключа между таблицей сбора и таблицей для сущности, используемой в качестве ключа карты.
Я использовал @ForeignKey для указания имен ограничений для @OneToMany, @ManyToMany и других @ElementCollections без проблем. Я пробовал атрибут @ inieName @ ForiegnKey, но он, кажется, игнорируется. @MapKeyJoinColumn не имеет свойств, которые могли бы повлиять на это.
Кто-нибудь знает, есть ли способ сделать это?