如何在jpa中使用join子实体来获取继承实体?

时间:2016-02-12 16:01:02

标签: java hibernate jpa inheritance

写这个案子会更容易解释。

我正在使用Seam 2.3.1 v Hibernate JPA 2.0和我们的项目。我有一个基础Person实体类。

@Entity
@Name("person")
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "person")
public class Person extends BaseEntity  {

    private String name;
    private String surName;
    private String email;
    private String phone;

    // getter & setters
}

我还有另外3个实体从人员@Inheritance(strategy = InheritanceType.JOINED)延伸:PersonelMusteriDisPaydas

@Entity
@Name("personel")
public class Personel extends Person {

    private String appellation; 
    // getter & setters
}

我想在我的bean中列出personels,musteris和dispaydas但是当我在我的Group Entity中设置它们时,我想将它们保存为Person。

实际上在DB中,person_id和personel_id之间没有区别,它们是相同的。但是,当我列出它时,它们是List<Personel>

总结:

我想从List<Person>获取List<Personel> 或来自Person对象的Personel

1 个答案:

答案 0 :(得分:0)

您必须在@Id的{​​{1}}课程中定义@ColumnPerson

但是,由于该列在子实体中具有不同的名称,因此您需要使用@AttributeOverride更改它以指向person_id personel_id

在父级中使用@Column和在子级中使用@DiscriminatorColumn并不会有什么坏处,但我认为Hibernate不需要这些。