@AttributeOverride不使用继承

时间:2015-08-02 14:28:33

标签: hibernate

我正在尝试更改子类表中的列名,但不会使用@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
)

1 个答案:

答案 0 :(得分:3)

有助于阅读@AttributeOverride JavaDoc

  

可以应用于扩展映射的超类或嵌入字段或属性的实体,以覆盖由映射的超类或可嵌入类(或其某个属性的可嵌入类)定义的基本映射或id映射。

当您使用InheritanceType.TABLE_PER_CLASS时,您只需切换到@MappedSuperclass Employee即可。如果您仍然需要EMP表,则可以从该超类继承第二个类。