我对一个字段有一种奇异的映射:
@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 指定约束名称,没有问题。我已经尝试过@ForiegnKey 的“inverseName”属性,但它似乎被忽略了。@MapKeyJoinColumn 似乎没有任何会影响这一点的属性。
有谁知道是否有办法做到这一点?