在JPA

时间:2015-11-23 11:25:24

标签: java database hibernate jpa orm

假设我有一个如下结构:MappedSuperclass,然后是从这个主类扩展的一般主类和子类。这些子类也有其他一些子类...

@MappedSuperclass
public abstract class BaseEntity{
    @Id
    @Basic(optional = false)
    @NotNull
    @GeneratedValue(strategy = GenerationType.Auto)
    @Column(name = "ID", nullable = false)
    protected Long id;

    @Version
    @Column (name = "VERSION", nullable = false)
    protected Long version

    // **** Setters getters etc...
}


@Entity 
@Table (name = "PERSON")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "PERSON_TYPE", discriminatorType = DiscriminatorType.String, length = 50)
@DiscriminatorValue("PERSONBASE")
public class PersonEO extends BaseEntity{

    @Column(name = "NAME")
    private String name;

    @Column(name = "SURNAME")
    private String surname;

    @Column(name = "PHONENO")
    private Long phoneNo;

    // **** Other properties / constructors & setters-getters...
}

@Entity 
@Table(name = "ENGINEER")
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorValue("ENGINEER")
public class EngineerEO extends PersonEO{

    @Column(name = "UNIVERSITY", length = 50)
    private String university;

    @Column(name = "GPA")
    private double gpa;

    // **** Other properties / constructors & setters-getters...
}

@Entity 
@Table(name = "CLERK")
@Inheritance(strategy = InheritanceType.JOINED) 
@DiscriminatorValue("CLERK")
public class ClerkEO extends PersonEO{

    @Column(name = "PLACE_OF_WORK", length = 50)
    private String pow;

    @Column(name = "EXPERTISE", length = 50)
    private String expertise;

    // **** Other properties / constructors & setters-getters...
}

我已经阅读过" DiscriminatorValue" 在运行时使用类似

的内容
@Transient
public String getDecriminatorValue() {
    return this.getClass().getAnnotation(DiscriminatorValue.class).value();
}

不是"正确的" 方法......所以我的问题是;如果有人拥有来自 BaseEntity " id" ,或者说" PhoneNo" 来自 PersonEO ,如何在不知道任何其他信息(类的类型)的情况下查询来自特定表的信息,如文员工程师(或可能是较低级别) )?

我的意思是我只知道" ID"我想从数据所属的表中获取所有属性。但我不知道它是工程师还是文员等......

建立这种关系的最有效方法是什么?

非常感谢...

0 个答案:

没有答案