我正在尝试更改子类表中的列名,但不会使用@AttributeOverride注释进行更改。
@Entity @Table(name="emp")
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Employee {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
protected int id;
protected String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Entity
@Table(name="RegularEmployee")
@AttributeOverrides({
@AttributeOverride(name="id", column=@Column(name="REGID")),
@AttributeOverride(name="name", column=@Column(name="REGNAME"))
})
public class RegularEmployee extends Employee {
private int salary;
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
但是创建的表结构是:
员工:
CREATE TABLE EMP
(
ID NUMBER(10) NOT NULL,
NAME VARCHAR2(255 CHAR)
)
RegularEmployee:
CREATE TABLE REGULAREMPLOYEE
(
ID NUMBER(10) NOT NULL,
NAME VARCHAR2(255 CHAR),
SALARY NUMBER(10) NOT NULL
)
答案 0 :(得分:3)
有助于阅读@AttributeOverride
的 JavaDoc :
可以应用于扩展映射的超类或嵌入字段或属性的实体,以覆盖由映射的超类或可嵌入类(或其某个属性的可嵌入类)定义的基本映射或id映射。
当您使用InheritanceType.TABLE_PER_CLASS
时,您只需切换到@MappedSuperclass
Employee
即可。如果您仍然需要EMP
表,则可以从该超类继承第二个类。