1

鉴于以下情况:

@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 是否可以有单独的序列生成器?

谢谢你的帮助。

杰森

4

1 回答 1

1

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

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

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

于 2012-05-18T18:33:25.257 回答