假设我有一个如下结构: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"我想从数据所属的表中获取所有属性。但我不知道它是工程师还是文员等......
建立这种关系的最有效方法是什么?
非常感谢...