当使用Hibernate的TABLE_PER_CLASS继承时,外键具有附加的随机数 [英] Foreign keys have random number appended when using Hibernate's TABLE_PER_CLASS inheritance

查看:120
本文介绍了当使用Hibernate的TABLE_PER_CLASS继承时,外键具有附加的随机数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  @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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆