時指定外鍵約束的名字,我有一種奇特的映射的一個字段:使用地圖和@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;
學年爲一個實體,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似乎沒有任何會影響到這一點的屬性。
有誰知道是否有辦法做到這一點?
你的意思是'FK1BCA4A883A97C498'?你爲什麼想要管理這個名字。 – 2011-02-12 00:11:38
是的。原因是如果違反約束條件,則返回的錯誤將包含一個有意義的名稱。 – 2011-02-12 03:28:11