2011-07-13 104 views
0

目前,我有我的域模型以下時,隨機數附加:外鍵在使用Hibernate的TABLE_PER_CLASS繼承

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
@Entity 
abstract class Item { 
    @ManyToOne 
    @ForeignKey(name="FK_ITEM_ORG") 
    @JoinColumn(name="ORG_ID") 
    private Organization org 
} 

@Table(name = "ItemA") 
public class ItemA extends Item {} 

@Table(name = "ItemB") 
public class ItemA extends Item {} 

Hibernate的就是hbm2ddl創建這個映射2個表:ItemAItemB。它們都有ORG_ID列和Organization表的外鍵。但是,每個外鍵都附有一個隨機數(即FK_ITEM_ORG98343)。我如何指定每個表使用的外鍵?例如,我想要有FK_ITEMA_ORGFK_ITEMB_ORG

更新

另請參見後續問題:Is the ForeignKey annotation only used by HBM2DDL to generate the schema?

回答

2

不幸的是,你必須從場主類中刪除批註,並將它與提供FK名移動到方法中的每個孩子。

類似的東西:

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
@Entity 
public abstract class Item { 
    private Organization org; 
    public Organization getOrg() { 
     return org; 
    } 

} 

@Entity 
@Table(name = "ItemA") 
public class ItemA extends Item { 
    @ManyToOne 
    @JoinColumn(name="ORG_ID") 
    @ForeignKey(name="FK_ITEM_ORG_1") 
    public Organization getOrg(){ 
     return super.getOrg(); 
    } 
} 


public class ItemB extends Item{ 
    @ManyToOne 
    @JoinColumn(name="ORG_ID") 
    @ForeignKey(name="FK_ITEM_ORG_2") 
    public Organization getOrg(){ 
     return super.getOrg(); 
    } 
} 
+0

我也猜這意味着我不能使用字段級註解?還是可以將字段和方法級別結合起來? –

+0

可以合併。有關詳細信息,請參閱@Access註釋。 – FoxyBOA

+0

謝謝,我會給它一個機會...... –