使用Hibernate InheritanceType.JOINED覆盖ID

时间:2012-05-17 18:55:19

标签: 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="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是否都有单独的序列生成器?

感谢您的帮助。

杰森

1 个答案:

答案 0 :(得分:1)

子类不能覆盖id,因为id只能在层次结构中定义一次。在JPA 2.0规范中,这被告知如下:

  

必须在作为root的实体类上定义主键   实体层次结构或映射的超类是(直接或   间接)实体层次结构中所有实体类的超类。   主键必须在实体层次结构中只定义一次。

此外,没有针对Hibernate的特定支持。唯一的问题是@Id在继承层次结构的叶子中可以做的不同,就是通过PrimaryKeyJoinColumn为id列定义不同的名称。