下面来看一下各个子类的实体映射配置,实体RegularEmployeeEO的代码如下所示。
RegularEmployeeEO实体
@Entity
@DiscriminatorValue("regular")
public class RegularEmployeeEO extends EmployeeEO{
/**
* 属性id、name自动继承子父类映射,
* */
private Integer vacationDays;
@Column(name="vacation_days")
public Integer getVacationDays() {
return vacationDays;
}
public void setVacationDays(Integer vacationDays) {
this.vacationDays = vacationDays;
}
}
标注子类时,应该注意以下问题。
l 每个子类的属性默认继承自父类的属性,并且默认映射到所对应的表,而不需要而外再进行定义。
l 每个子类除了要标注@Entity注释外,还要使用@DiscriminatorValue标识每个子类所对应的标识值,与父类的注释使用作用相同。
其它的子类的代码与RegularEmployeeEO实体代码类似,只是标识的字段值不同,分别如以下所示。
ContractEmployeeEO实体
@Entity
@DiscriminatorValue("contract")
public class ContractEmployeeEO extends EmployeeEO {
private Date createDate;
private Date expiredDate;
@Column(name="create_date")
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
@Column(name="expired_date")
public Date getExpiredDate() {
return expiredDate;
}
public void setExpiredDate(Date expiredDate) {
this.expiredDate = expiredDate;
}
}
FTEmployeeEO实体
@Entity
@DiscriminatorValue("fulltime")
public class FTEmployeeEO extends ContractEmployeeEO {
private Double monthlySalary;
@Column(name = "monthly_salary")
public Double getMonthlySalary() {
return monthlySalary;
}
public void setMonthlySalary(Double monthlySalary) {
this.monthlySalary = monthlySalary;
}
}
PTEmployeeEO实体
@Entity
@DiscriminatorValue("parttime")
public class PTEmployeeEO extends ContractEmployeeEO {
private Double hourlySalary;
private Integer workedHours;
@Column(name = "hourly_salary")
public Double getHourlySalary() {
return hourlySalary;
}
public void setHourlySalary(Double hourlySalary) {
this.hourlySalary = hourlySalary;
}
@Column(name = "worked_hours")
public Integer getWorkedHours() {
return workedHours;
}
public void setWorkedHours(Integer workedHours) {
this.workedHours = workedHours;
}
}