0

我目前在我的域模型中有以下内容:

@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_ORGand FK_ITEMB_ORG

更新

另请参阅后续问题:ForeignKey 注释是否仅由 HBM2DDL 用于生成架构?

4

1 回答 1

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();
    }
}
于 2011-07-16T17:26:02.310 回答