2013-06-21 41 views
0

我有一個關於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; 
... 

} 

我希望能夠把學生一般名單作爲List而不是List這樣,學生或教師可以是學生。無論如何,我這樣做,仍然有他們作爲學生/老師的對象堅持?冬眠'聰明'足以找出真正的課堂?休眠是否有這種能力?

+0

試試這個List <?擴展人>學生 –

+0

謝謝,我試過了,但它然後拋出:org.hibernate.AnnotationException:集合沒有泛型類型或OneToMany.targetEntity()定義:... – csyperski

回答

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.studentsCourse.people因爲該名單可以容納Teacher情況下也。