关于继承,我有一个关于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;足以弄明白真正的班级?休眠是否具备此功能?
答案 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
个实例。