Укажите имя ограничения внешнего ключа при использовании Map и @ElementCollection с Hibernate

У меня есть своего рода экзотическое сопоставление для поля:

@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, похоже, не имеет свойств, которые могли бы повлиять на это.

Кто-нибудь знает, есть ли способ это сделать?

19
задан cliff.meyers 10 February 2011 в 04:33
поделиться