Hibernate和@AttributeOverride

时间:2015-08-06 20:28:49

标签: java hibernate

我有3个班级:

@MappedSuperclass
public class BaseEntity {
    @Id
    @GeneratedValue
    private Long id;
    ...
}

@Entity
public class Person extends BaseEntity {
     private String name;
     ...
}

@Entity
@AttributeOverride(name = "id", @Column = (name = "idStudent"))
public class Student extends Person {
    private float avgGrades;
    ...
}

我想覆盖ID属性,因此在Student表中会有idStudent列而不是id。不幸的是,上面的代码不起作用。看起来@AttributeOverride仅适用于您扩展的类(并且没有更进一步)。有没有办法在我已经描述的情况下覆盖属性名称(覆盖我们类扩展的类中的覆盖属性)?

1 个答案:

答案 0 :(得分:1)

如果您知道默认继承类型是什么,那么您的问题很容易理解:SINGLE_TABLE

这意味着扩展Person的所有实体都在同一个表中。因此Person已经定义了ID列。因为否则会违反Person表的主键列的合同。

我也引用了@AttributeOverride的JavaDoc:

  

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

在此处提问之前,首先阅读JavaDoc总是有帮助的。

你能做些什么?让您的Person成为@MappedSuperclass(或创建一个BasePerson