Hibernate JoinTable有多种类型

时间:2013-12-27 00:59:04

标签: java hibernate jointable

我正在尝试在两个实体之间建立多对多关系,其中有多种关系类型。

例如,假设我们有一个表“course”,一个表“person”和一个映射表“course_person”。任何给定的课程都可以有教师,评分员和学生,每个都是人员表中的集合。每个人都可以加入不同角色的多门课程。

表“course_person”包含列“course_id”,“person_id”和“type”,其中type是“INSTRUCTOR”,“GRADER”或“STUDENT”。

课程类将有三个不同的Set成员,每个成员列出给定角色的人员。它看起来像这样:

@Entity
@Table(name = "course")
public class Course{
    private Set<Person> instructors;
    private Set<Person> graders;
    private Set<Person> students;

    @ManyToMany(
        targetEntity=Person.class,
        cascade={CascadeType.PERSIST, CascadeType.MERGE}
    )
    @JoinTable(
        name="course_person",
        joinColumns=@JoinColumn(name="course_id"),
        inverseJoinColumns=@JoinColumn(name="person_id")
    )
    @WhereJoinTable(clause="type='INSTRUCTORS'")
    public Set<Person> getInstructors() {
        return this.instructors;
    }

    @ManyToMany(
        targetEntity=Person.class,
        cascade={CascadeType.PERSIST, CascadeType.MERGE}
    )
    @JoinTable(
        name="course_person",
        joinColumns=@JoinColumn(name="course_id"),
        inverseJoinColumns=@JoinColumn(name="person_id")
    )
    @WhereJoinTable(clause="type='GRADER'")
    public Set<Person> getGraders() {
        return this.graders;
    }

    @ManyToMany(
        targetEntity=Person.class,
        cascade={CascadeType.PERSIST, CascadeType.MERGE}
    )
    @JoinTable(
        name="course_person",
        joinColumns=@JoinColumn(name="course_id"),
        inverseJoinColumns=@JoinColumn(name="person_id")
    )
    @WhereJoinTable(clause="type='STUDENT'")
    public Set<Person> getStudents() {
        return this.students;
    }
}

这适用于从数据库中读取数据。但是,它不适用于在map表中创建新条目,因为hibernate不知道要将“type”设置为什么。我需要找到一种方法将每个关系类型的“教师”类型设置为“INSTRUCTOR”等。这可行吗?

0 个答案:

没有答案