使用Hibernate InheritanceType.JOINED重写ID
鉴于以下情况:使用Hibernate InheritanceType.JOINED重写ID,hibernate,Hibernate,鉴于以下情况: @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=
@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是否可以有单独的序列生成器
Jason子类无法重写id,因为id只能在层次结构中定义一次。在JPA 2.0规范中,说明如下: 必须在作为根的实体类上定义主键 实体层次结构的或映射的超类上的(直接或 间接)实体层次结构中所有实体类的超类。 主键必须在实体层次结构中定义一次
此外,没有特定于Hibernate的支持。在继承层次结构的叶子中,@Id唯一可以做的不同的事情是通过为Id列定义不同的名称。子类不能重写Id,因为Id在层次结构中只能定义一次。在JPA 2.0规范中,说明如下: 必须在作为根的实体类上定义主键 实体层次结构的或映射的超类上的(直接或 间接)实体层次结构中所有实体类的超类。 主键必须在实体层次结构中定义一次 此外,没有特定于Hibernate的支持。唯一一件事,@Id在继承层次结构的叶子中可以做的不同的事情是通过为Id列定义不同的名称