2012-05-17 66 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列的不同名稱。

相關問題