我有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
仅适用于您扩展的类(并且没有更进一步)。有没有办法在我已经描述的情况下覆盖属性名称(覆盖我们类扩展的类中的覆盖属性)?
答案 0 :(得分:1)
如果您知道默认继承类型是什么,那么您的问题很容易理解:SINGLE_TABLE
。
这意味着扩展Person
的所有实体都在同一个表中。因此Person
已经定义了ID列。因为否则会违反Person
表的主键列的合同。
我也引用了@AttributeOverride
的JavaDoc:
可以应用于扩展映射的超类或嵌入字段或属性的实体,以覆盖由映射的超类或可嵌入类(或其某个属性的可嵌入类)定义的基本映射或id映射。
在此处提问之前,首先阅读JavaDoc总是有帮助的。
你能做些什么?让您的Person
成为@MappedSuperclass
(或创建一个BasePerson
。