Tôi có một loại bản đồ kỳ lạ cho một lĩnh vực:Chỉ định tên ràng buộc khoá ngoại khi sử dụng Bản đồ và @ElementCollection với 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;
năm học là một thực thể và GradeLevel là một enum.
Tôi đang sử dụng các công cụ Hibernate để tạo DDL cho lược đồ. Giản đồ rằng đây là tạo ra dưới đây:
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;
Vấn đề là tôi dường như không thể thay đổi tên hạn chế cho chính nước ngoài giữa các bảng thu thập và bảng cho các đơn vị sử dụng làm khóa bản đồ.
Tôi đã sử dụng @ForeignKey để chỉ định các tên ràng buộc cho @OneToMany, @ManyToMany và @ElementCollections khác không có vấn đề gì. Tôi đã thử thuộc tính "inverseName" của ForiegnKey nhưng dường như nó bị bỏ qua. @MapKeyJoinColumn dường như không có bất kỳ thuộc tính nào có thể ảnh hưởng đến điều này.
Có ai biết nếu có cách nào để thực hiện việc này không?
Ý của bạn là 'FK1BCA4A883A97C498'? Tại sao bạn muốn quản lý tên này. –
Có. Lý do là nếu ràng buộc bị vi phạm thì lỗi được trả về sẽ chứa một tên có ý nghĩa. –
Ai đó đã mở một vé ngay tại đây: http://opensource.atlassian.com/projects/hibernate/browse/HCANN-24. Bạn có thể muốn bỏ phiếu để các nhà phát triển Hibernate biết tầm quan trọng của việc sửa lỗi này. – limc