フィールドの一種のエキゾチックなマッピングがあります。
@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 には、これに影響するプロパティがないようです。
これを行う方法があるかどうか誰かが知っていますか?