У меня есть своего рода экзотическое сопоставление для поля:
@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;
Проблема в том, что я не могу изменить имя ограничения для внешнего ключа между таблицей коллекции и таблицей для объекта, используемого в качестве ключа карты.
I ' Мы без проблем использовали @ForeignKey, чтобы указать имена ограничений для @OneToMany, @ManyToMany и других @ElementCollections. Я пробовал использовать атрибут «inverseName» @ ForiegnKey, но, похоже, его игнорируют. @MapKeyJoinColumn, похоже, не имеет свойств, которые могли бы повлиять на это.
Кто-нибудь знает, есть ли способ это сделать?