我正在尝试映射一个类似于在 JavaDoc 中为 @MapKeyJoinColumn 指定的示例 3 的 HashMap(请参阅http://www.objectdb.com/api/java/jpa/MapKeyJoinColumn):
@Entity
public class Student {
@Id int studentId;
...
@ManyToMany // students and courses are also many-many
@JoinTable(name="ENROLLMENTS",
joinColumns=@JoinColumn(name="STUDENT"),
inverseJoinColumns=@JoinColumn(name="SEMESTER"))
@MapKeyJoinColumn(name="COURSE")
Map<Course, Semester> enrollment;
...
}
生成的连接表(使用 EclipseLink 2.3 生成)具有以下布局:
TABLE enrollments (
student_id bigint NOT NULL,
semester_id bigint NOT NULL,
course_id bigint,
CONSTRAINT enrollments_pkey PRIMARY KEY (student_id, semester_id)
)
为什么为 Student 和 Semester 生成主键,而不为 Student 和 Course 生成主键?在这种情况下,这没有任何意义。有了这个主键,学生每学期只能参加一门课程。'student_id' 和 'course_id' 应该被定义为主键!这也将匹配 Java 映射定义(键必须是唯一的,但可以将相同的值分配给不同的键)