外键在使用Hibernate';s表每类继承
我的域模型中当前包含以下内容:外键在使用Hibernate';s表每类继承,hibernate,foreign-keys,hbm2ddl,Hibernate,Foreign Keys,Hbm2ddl,我的域模型中当前包含以下内容: @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 cla
@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为此映射创建了两个表:ItemA
和ItemB
。两者都有ORG\u ID
列和Organization
表的外键。但是,每个外键都附加了一个随机数(即FK_ITEM_ORG98343)。如何指定每个表使用的外键?例如,我希望有FK_ITEMA_ORG
和FK_ITEMB_ORG
更新
另请参见下面的问题:不幸的是,您必须从主类中的字段中删除注释,并将其移动到提供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();
}
}
我猜这也意味着我不能使用字段级注释?或者可以将字段和方法级别合并?可以合并。有关详细信息,请参见@Access注释。此外,如果您希望全局重新定义FK名称,命名策略也可以帮助您,例如,好主意!如果您对我上面链接的后续问题有任何想法,我将不胜感激:)