Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate-列表引用超类_Java_Hibernate_Jpa - Fatal编程技术网

Java 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

我有一个关于继承的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;
...

}
公共课{
...
@许多
私人名单学生;
...
}

我希望能够将学生列表一般地视为一个列表,而不是一个学生或老师可以成为学生的列表。我是否可以这样做,并且仍然让它们作为学生/教师对象持续存在?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()。。。