鉴于以下情况:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name="TOP_TABLE")
public class BaseClass implements Serializable {
private Long id;
@Id
public Long getId() {
}
}
// PrimaryKeyJoinColumns
@Entity
@Table(name="TABLE_A")
public class ClassA extends BaseClass {
@Id
public Long getId() {
}
}
@Entity
@Table(name="TABLE_B")
// Primary Key Join Columns
public class ClassB extends BaseClass {
@Id
public Long getId() {
}
}
我有两个问题:
在InheritanceType.JOINED中,子类是否可以覆盖父级的id?这是因为:
如果通过序列生成ID,那么每个子类的id是否都有单独的序列生成器?
感谢您的帮助。
杰森
答案 0 :(得分:1)
子类不能覆盖id,因为id只能在层次结构中定义一次。在JPA 2.0规范中,这被告知如下:
必须在作为root的实体类上定义主键 实体层次结构或映射的超类是(直接或 间接)实体层次结构中所有实体类的超类。 主键必须在实体层次结构中只定义一次。
此外,没有针对Hibernate的特定支持。唯一的问题是@Id在继承层次结构的叶子中可以做的不同,就是通过PrimaryKeyJoinColumn为id列定义不同的名称。