有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Hibernate可连接多个类型

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

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

“课程人员”表有“课程id”、“人员id”和“类型”列,其中类型为“讲师”、“评分员”或“学生”

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

@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;
    }
}

这对于从数据库读取数据非常有效。但是,它不适用于在映射表中创建新条目,因为hibernate不知道将“type”设置为什么。我需要找到一种方法,将任何Person对象添加到“讲师”中,并将每个关系类型的类型设置为“讲师”,等等。这可行吗


共 (0) 个答案