Java Hibernate-列表引用超类
我有一个关于继承的hibernate的问题。如果我有以下课程:Java Hibernate-列表引用超类,java,hibernate,jpa,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
@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;
...
}
公共课{
...
@许多
私人名单学生;
...
}
我希望能够将学生列表一般地视为一个列表,而不是一个学生或老师可以成为学生的列表。我是否可以这样做,并且仍然让它们作为学生/教师对象持续存在?hibernate是否足够聪明,能够找出真正的类?hibernate有这个功能吗 您的配置很好,Hibernate可以处理这个问题。每当保存
Student
的实例时,Hibernate将生成两个insert语句,一个用于people
表,另一个用于Student
表。您可以这样做,例如:
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);
当存在关联时,不会发生任何变化。例如:
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);
课程c=新课程();
c、 学生=新数组列表();
人员p=新学生();
s、 持久性(p);
c、 新增(p);
第二届会议(c);
PS:您可能希望将
课程。学生更改为课程。人员,因为该列表也可以容纳教师实例。尝试此列表谢谢,我试过了,但它随后抛出:org.hibernate.AnnotationException:Collection既没有泛型类型,也没有定义一个omany.targetEntity()。。。