当使用Hibernate的TABLE_PER_CLASS继承时,外键具有附加的随机数 [英] Foreign keys have random number appended when using Hibernate's TABLE_PER_CLASS inheritance
问题描述
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Entity
抽象类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个表: ItemA
和 ItemB
。它们都有 ORG_ID
列和 Organization
表的外键。但是,每个外键都附有一个随机数(即FK_ITEM_ORG98343)。我怎样才能指定每个表使用的外键?例如,我想要 FK_ITEMA_ORG
和 FK_ITEMB_ORG
。
更新
另请参阅以下问题:是否只有HBM2DDL使用ForeignKey注解来生成模式?
不幸的是,你必须从主类中的字段中移除注释,并将其移动到每个提供FK名称的子项中。 b
类似于:
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@实体
公共抽象类项目{
private Organization org;
public Organization getOrg(){
return org;
$ b实际
@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();
$ b public class ItemB extends Item {
@ManyToOne
@JoinColumn(name =ORG_ID)
@ForeignKey(name =FK_ITEM_ORG_2)
public Organization getOrg(){
return super.getOrg();
}
}
I currently have the following in my domain model:
@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's HBM2DDL creates 2 tables for this mapping: ItemA
and ItemB
. Both have the ORG_ID
column and a foreign key to the Organization
table. However, each foreign key has a random number appended (ie FK_ITEM_ORG98343). How can I specify what foreign key each table uses? For example, I want to have FK_ITEMA_ORG
and FK_ITEMB_ORG
.
Update
Please also see the follow-on question: Is the ForeignKey annotation only used by HBM2DDL to generate the schema?
Unfortunately, you have to remove annotation from field in main class and move it to method in each children with providing FK name.
Something like that:
@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();
}
}
这篇关于当使用Hibernate的TABLE_PER_CLASS继承时,外键具有附加的随机数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!