Hibernate - 列出引用超类

时间:2013-06-21 12:38:18

标签: java hibernate jpa

关于继承,我有一个关于hibernate的问题。如果我有以下课程:

@Entity
@Table(name = "people")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name = "discriminator", discriminatorType = DiscriminatorType.STRING)
public abstract class Person

@Entity
@Table(name="teachers")
@DiscriminatorValue("t")
public class Teacher extends Person 

@Entity
@Table(name="students")
@DiscriminatorValue("s")
public class Student extends Person

然后我想要做的是在下面的类中一般处理所有这些:

public class Course {

...
@ManyToMany
private List<Person> students;
...

}

我希望能够将学生列表一般地视为列表而不是列表,这样学生或教师就可以成为学生。反正我有没有这样做,仍然坚持学生/教师的对象?是休眠和聪明的#39;足以弄明白真正的班级?休眠是否具备此功能?

1 个答案:

答案 0 :(得分:0)

您的配置很好,Hibernate可以处理这个问题。每当Student的实例被持久化时,Hibernate将生成两个插入语句,一个用于people表,另一个用于students表。您可以这样做:

Person p = new Student();
session.persist(p);

存在关联时,没有任何变化。例如:

Course c = new Course();
c.students = new ArrayList<Person>();

Person p = new Student();
s.persist(p);

c.people.add(p);
session.persist(c);

PS :您可能希望将Course.students更改为Course.people,因为该列表也可以容纳Teacher个实例。