2012-05-17 29 views
1

考虑以下情况:Overridding标识使用Hibernate InheritanceType.JOINED

@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?这是因为:

  • 如果Ids是通过序列生成的,那么每个子类的ID是否可以有不同的序列生成器?

感谢您的任何帮助。

Jason

回答

1

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

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

此外,没有Hibernate特定的支持。唯一的事情是,可以在继承层次结构中以不同方式完成的@Id是通过PrimaryKeyJoinColumn定义id列的不同名称。

相关问题